ND4S: N-Dimensional Arrays for Scala — различия между версиями

Материал из Национальной библиотеки им. Н. Э. Баумана
Строка 13: Строка 13:
 
| latest preview date    = <!-- {{Start date and age|YYYY|MM|DD}} -->
 
| latest preview date    = <!-- {{Start date and age|YYYY|MM|DD}} -->
 
| frequently updated    = <!-- DO NOT include this parameter unless you know what it does -->
 
| frequently updated    = <!-- DO NOT include this parameter unless you know what it does -->
| programming language  = [[Scala (programming language)|Java]]
+
| programming language  = [[Scala (язык программирования)|Scala]]
 
| operating system      = [[Linux]], [[Mac OS X| OS X]], [[Microsoft Windows|Windows]], [[Android (Операционные Системы) |Android]]
 
| operating system      = [[Linux]], [[Mac OS X| OS X]], [[Microsoft Windows|Windows]], [[Android (Операционные Системы) |Android]]
 
| platform              = [[Кросс-платформенное программное обеспечение|Cross-platform]]
 
| platform              = [[Кросс-платформенное программное обеспечение|Cross-platform]]
Строка 35: Строка 35:
 
==Установка ND4S ==
 
==Установка ND4S ==
 
ND4S активно развивается. Вы можете клонировать репозиторий, скомпилировать его, и ссылаться на него в вашем проекте. Клонирование репозитория:
 
ND4S активно развивается. Вы можете клонировать репозиторий, скомпилировать его, и ссылаться на него в вашем проекте. Клонирование репозитория:
<console>  
+
<console>##i## $ git clone https://github.com/deeplearning4j/nd4s.git ##!i##</console>
$ git clone https://github.com/deeplearning4j/nd4s.git
+
</console>
+
 
   
 
   
 
Компиляция проекта:
 
Компиляция проекта:
<console>  
+
<console>##i## $ cd nd4s ##!i##
$ cd nd4s
+
##i## $ sbt +publish-local ##!i##</console>
$ sbt +publish-local
+
</console>  
+
  
 
Другой путь, используя REPL:
 
Другой путь, используя REPL:
<console>  
+
<console>##i## $ cd nd4s ##!i##
$ cd nd4s
+
##i## $ sbt test:console ##!i##</console>
$ sbt test:console
+
</console>  
+
  
 
Запустится REPL с импортированными автоматически <code>org.nd4s.Implicits._ </code> и <code>org.nd4j.linalg.factory.Nd4j</code> . Он использует <code>jblas</code> бэкенд по умолчанию.
 
Запустится REPL с импортированными автоматически <code>org.nd4s.Implicits._ </code> и <code>org.nd4j.linalg.factory.Nd4j</code> . Он использует <code>jblas</code> бэкенд по умолчанию.
<console>  
+
<console>##y## scala>   ##!y####i##  val arr = (1 to 9).asNDArray(3,3) ##!i##
scala> val arr = (1 to 9).asNDArray(3,3)  
+
##g## arr: org.nd4j.linalg.api.ndarray.INDArray = ##!g##
arr: org.nd4j.linalg.api.ndarray.INDArray =
+
##g## [[1.00,2.00,3.00] ##!g##
[[1.00,2.00,3.00]
+
##g## [4.00,5.00,6.00] ##!g##
[4.00,5.00,6.00]
+
##g## [7.00,8.00,9.00]] ##!g##
[7.00,8.00,9.00]]
+
##y## scala>   ##!y####i##  val sub = arr(0->2,1->3) ##!i##
scala> val sub = arr(0->2,1->3)
+
##g## sub: org.nd4j.linalg.api.ndarray.INDArray = ##!g##
sub: org.nd4j.linalg.api.ndarray.INDArray =
+
##g## [[2.00,3.00] ##!g##
  [[2.00,3.00]
+
##g##  [5.00,6.00]]##!g##</console>
  [5.00,6.00]]
+
 
</console>
+
  
 
==Таблица команд и их эквивалентов==
 
==Таблица команд и их эквивалентов==

Версия 14:48, 24 декабря 2016

ND4S: N-Dimensional Arrays for Scala
Создатели: Adam Gibson, Taisuke Oe
Разработчики: various
Постоянный выпуск: 0.0.3.5.5 / 15 September 2014 года; 5 years ago (2014-09-15)
Состояние разработки: active
Написана на: Scala
Операционная система: Linux, OS X, Windows, Android
Платформа: Cross-platform
Тип ПО: Natural language processing, Deep learning, Machine vision
Лицензия: Apache 2.0
Веб-сайт github.com/deeplearning4j/nd4s

ND4S это бесплатное расширение языка программирования Scala с открытым исходным кодом, работающего на виртуальной машине Java, таким образом он совместим с Java и Clojure.

ND4S является научно-вычислительной библиотекой для линейной алгебры и манипулирования матрицами в производственной среде, интегрирована с Hadoop и Spark для работы с распределенными графическими процессорами. Он поддерживает n-мерные массивы для языков, основанных на JVM. ND4S в первую очередь была разработана группой в Сан-Франциско (Deeplearning4j) , во главе с Adam Gibson.Он был создан под лицензией Apache Software Foundation.


Операции ND4S включают распределенные параллельные версий. Они могут занимать место в кластере и обрабатывать большие объемы данных. Манипуляции с матрицами происходят параллельно на процессорах или графических процессорах в облаке, и может работать в пределах кластеров Spark или Hadoop .

Тесты показывают , что ND4S работает примерно вдвое быстрее, чем Numpy на больших матрицах.

Установка ND4S

ND4S активно развивается. Вы можете клонировать репозиторий, скомпилировать его, и ссылаться на него в вашем проекте. Клонирование репозитория:

 $ git clone https://github.com/deeplearning4j/nd4s.git 

Компиляция проекта:

 $ cd nd4s 
 $ sbt +publish-local 

Другой путь, используя REPL:

 $ cd nd4s 
 $ sbt test:console 

Запустится REPL с импортированными автоматически org.nd4s.Implicits._ и org.nd4j.linalg.factory.Nd4j . Он использует jblas бэкенд по умолчанию.

 scala>     val arr = (1 to 9).asNDArray(3,3)  
 arr: org.nd4j.linalg.api.ndarray.INDArray = 
 [[1.00,2.00,3.00] 
 [4.00,5.00,6.00] 
 [7.00,8.00,9.00]] 
 scala>     val sub = arr(0->2,1->3) 
 sub: org.nd4j.linalg.api.ndarray.INDArray = 
  [[2.00,3.00] 
  [5.00,6.00]]


Таблица команд и их эквивалентов

ND4S синтаксис Эквивалентный NumPy синтаксис Результат
Array(Array(1,2,3),Array(4,5,6)).toNDArray np.array([[1, 2 , 3], [4, 5, 6]]) [[1.0, 2.0, 3.0] [4.0, 5.0, 6.0]]
val arr = (1 to 9).asNDArray(3,3) arr = np.array([[1, 2 , 3], [4, 5, 6],[7, 8, 9]]) [[1.0, 2.0, 3.0] [4.0, 5.0, 6.0] ,[7.0, 8.0, 9.0]]
arr(0,0) arr[0,0] 1.0
arr(0,->) arr[0,:] [1.0, 2.0, 3.0]
arr(--->) arr[...] [[1.0, 2.0, 3.0] [4.0, 5.0, 6.0] ,[7.0, 8.0, 9.0]]
arr(0 -> 3 by 2, ->) arr[0:3:2,:] [[1.0, 2.0, 3.0] [7.0, 8.0, 9.0]]
arr(0 to 2 by 2, ->) arr[0:3:2,:] [[1.0, 2.0, 3.0] [7.0, 8.0, 9.0]]
arr.filter(_ > 3) [[0.0, 0.0, 0.0] [4.0, 5.0, 6.0] ,[7.0, 8.0, 9.0]]
arr.map(_ % 3) [[1.0, 2.0, 0.0] [1.0, 2.0, 0.0] ,[1.0, 2.0, 0.0]]
arr.filterBit(_ < 4) [[1.0, 1.0, 1.0] [0.0, 0.0, 0.0] ,[0.0, 0.0, 0.0]]
arr + arr arr + arr [[2.0, 4.0, 6.0] [8.0, 10.0, 12.0] ,[14.0, 16.0, 18.0]]
arr * arr arr * arr [[1.0, 4.0, 9.0] [16.0, 25.0, 36.0] ,[49.0, 64.0, 81.0]]
arr dot arr np.dot(arr, arr) [[30.0, 36.0, 42.0] [66.0, 81.0, 96.0] ,[102.0, 126.0, 150.0]]
arr.sumT np.sum(arr) 45.0 //returns Double value
val comp = Array(1 + i, 1 + 2 * i).toNDArray comp = np.array([1 + 1j, 1 + 2j]) [1.0 + 1.0i ,1.0 + 2.0i]
comp.sumT np.sum(comp) 2.0 + 3.0i //returns IComplexNumber value
for(row <- arr.rowP if row.get(0) > 1) yield row*2 [[8.00,10.00,12.00] [14.00,16.00,18.00]]
val tensor = (1 to 8).asNDArray(2,2,2) tensor = np.array([[[1, 2], [3, 4]],[[5,6],[7,8]]]) [[[1.00,2.00] [3.00,4.00]] [[5.00,6.00] [7.00,8.00]]]
for(slice <- tensor.sliceP if slice.get(0) > 1) yield slice*2 [[[10.00,12.00][14.00,16.00]]]
arr(0 -> 3 by 2, ->) = 0 [[0.00,0.00,0.00] [4.00,5.00,6.00] [0.00,0.00,0.00]]

Источники