Как избежать итерации по NArray
У меня есть несколько точек, определенных как 2x2 NArrays, и я не могу понять, как избежать итерации. Вот что у меня работает
# Instantiate an example point
point = NArray[[4, 9], [1, 1]]
# Create a blank array to fill
possible_points = NArray.int(2, 2, 16)
possible_points.shape[0].times do |i|
possible_points[i, 0, true] = point[i, 0]
end
Это создает NArray, который выглядит как
[ [ [ 4, 9 ],
[ 0, 0 ] ],
[ [ 4, 9 ],
[ 0, 0 ] ],
...
по всем 16 элементам в последнем измерении.
Однако я хочу что-то вроде этого:
possible_points[true, 0, true] = point[true, 0]
Эта итерационная разновидность побеждает цель числовой векторной библиотеки. Также это две строки кода вместо одной.
По сути, первый пример (тот, который работает) позволяет мне назначить одну цифру для NArray размера 1,n. Второй пример (тот, который не работает) возвращает ошибку, потому что я пытаюсь присвоить NArray размера 2 местоположению размера 2,n.
Кто-нибудь знает, как я могу избежать повторения, как это?
1 ответ
point = NArray[[4, 9], [1, 1]]
=> NArray.int(2,2):
[ [ 4, 9 ],
[ 1, 1 ] ]
possible_points = NArray.int(2, 2, 16)
possible_points[true,0,true] = point[true,0].newdim(1)
possible_points
=> NArray.int(2,2,16):
[ [ [ 4, 9 ],
[ 0, 0 ] ],
[ [ 4, 9 ],
[ 0, 0 ] ],
[ [ 4, 9 ],
[ 0, 0 ] ],
[ [ 4, 9 ],
[ 0, 0 ] ],
[ [ 4, 9 ],
[ 0, 0 ] ],
...
Для хранения массива shape-N в массив shape-NxM преобразуйте форму shape = [N] в shape=[N,1]. В операциях между shape=[N,M] и shape = [N, 1] элемент с осью размера =1 используется многократно. Это общее правило NArray, которое также применимо к арифметическим операциям.