#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
Спасибо за любую помощь.
Ответ №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. Если вы столкнетесь с конкретными проблемами, которые вы не понимаете, вы можете задать отдельные вопросы о них.