путаница в работе с python и javascript numpy ndarray

#javascript #python #numpy

#javascript #python #numpy

Вопрос:

Я пытаюсь преобразовать некоторый код python numpy в javascript, и я не уверен в том, что на самом деле делает следующий код.

self.W = np.random.rand(size, size)-0.5

self.W /= 0.9

Что - 0.5 делает в этом случае? Вычитает ли это 0,5 из каждого числа в многомерном массиве. Чуть ниже этой строки происходит ли разделение для каждого элемента внутри self.W? Чтобы преобразовать в javascript, могу ли я просто выполнить итерацию по всем элементам и применить операцию к элементу с этим индексом?

Кроме того, в следующем фрагменте, что на самом деле происходит?? Я понятия не имею, что происходит. Я использую обозначение в квадратных скобках, являющееся индексом, но это выглядит как условие (например, троичное?), Но также похоже, что оно генерирует новую матрицу для этого.

self.W[np.random.rand(size, size)>self.sparsity] = 0

Спасибо за любую помощь.

Оригинальный код Python на GitHub

Ответ №1:

Вероятно, вам следует просто установить соответствующую версию Python и numpy при попытке подобного преобразования.

С помощью нескольких простых строк тестирования в командной строке вы сможете ответить на свой собственный вопрос:

 >>> import numpy as np
>>> np.random.rand(1, 2)
array([[0.08239857, 0.15732393]])
>>> x = np.random.rand(1, 2)
>>> x
array([[0.08155715, 0.57869165]])
>>> x - .5
array([[-0.41844285,  0.07869165]])
  

Итак, да — в numpy.ndarray типе определена операция вычитания, которая при представлении числа в качестве второго операнда и массива в качестве первого вычитает это число из каждого элемента массива.

С разделением, аналогично:

 >>> x *= 10
>>> x
array([[0.81557146, 5.78691654]])
>>> x /= 10
>>> x
array([[0.08155715, 0.57869165]])
  

Разница в том, что / возвращает новый результирующий массив (в x / 10 ), тогда как /= присваивает результат x , перезаписывая его значения в x /= 10 .

Последний пример более сложный, но очень типичный для реализации numpy библиотеки. Аналогично распределяемым операциям like - и /= , применение сравнения к массиву распределяет его и возвращает массив логических значений, которые затем могут быть использованы в качестве «индекса» для выбора именно тех значений массива, для которых является массив логических значений True .

Затем он переходит к установке именно тех выбранных значений в 0 , которые вы привели в примере.

Спрашивать, как кодировать эти операции на JavaScript, значит просто просить SO написать ваш код за вас — теперь, когда вы понимаете, что происходит, вам следует попытаться реализовать ту же логику в JavaScript. Если вы столкнетесь с конкретными проблемами, которые вы не понимаете, вы можете задать отдельные вопросы о них.