Я не понимаю, почему это не транслируется:
import cupy as cp
popSize = 100
features = 426
maxDepth = 2
featureLoc1 = cp.zeros(shape=(popSize,features,maxDepth),dtype='int')
featureLoc1[:,:,:] = cp.arange(0,features,1)
ValueError: operands could not be broadcast together with shapes (100, 426, 426), (100, 426, 2)
Разве я не сделал бы это для двумерного массива?
ОК, я обновил его, чтобы сделать его воспроизводимым, и добавил ошибку
какой результат вы ожидаете?
Трехмерный массив, в котором каждая строка имеет значение [0 1 2 ... признаков]. Таким образом, каждый элемент равен своему номеру столбца.
Когда вы говорите каждую строку, что вы имеете в виду? это трехмерный массив. какова форма этого выходного массива
Каждая строка означает каждую строку, количество измерений не имеет значения? Другой способ сказать, что значение каждого элемента равно номеру его столбца.
тензоры просто массивы с более чем 2d?
@lara_toff Слова «каждая строка означает каждую строку» не поясняют, что вы имеете в виду. Что такое «строка» и «столбец» в 3D? Я понимаю эти термины в 2d, но что вы подразумеваете под ними в 3d?
С numpy
:
In [149]: popSize = 100
...: features = 426
...: maxDepth = 2
...:
...: featureLoc1 = np.zeros(shape=(popSize,features,maxDepth),dtype='int')
...: featureLoc1[:,:,:] = np.arange(0,features,1)
Traceback (most recent call last):
File "<ipython-input-149-232c28d9bf32>", line 6, in <module>
featureLoc1[:,:,:] = np.arange(0,features,1)
ValueError: could not broadcast input array from shape (426) into shape (100,426,2)
(100 426,2) — форма целевого массива, featureLoc
. (426,) — форма аранжировки. По правилам вещания это не работает.
featureLoc1[:,:,:] = np.arange(0,features,1)[:,None]
работает. Здесь RHS имеет форму (426,1), которая может быть передана в (1,426,1) и далее в (100,426,2)
IIUC, вы хотите, чтобы np.arange транслировался по измерениям с размерами 100 и 2, вы можете сделать это -
import numpy as np
popSize = 100
features = 426
maxDepth = 2
featureLoc1 = np.zeros(shape=(popSize,features,maxDepth),dtype='int')
featureLoc1[:,:,:] = np.arange(0,features,1)[None,:,None]
Вы можете узнать больше здесь и здесь.
Вещание здесь будет работать аналогично этому примеру -
В этом случае широковещание между (100,426,2) и (1,426,1) приведет к (100,462,2) широковещанию по первой и последней оси.
у вас есть ссылка, где я могу узнать правила вещания
Пожалуйста, предоставьте минимальный воспроизводимый пример, который мы можем запустить сами. Также укажите ошибку, которую вы получаете из своего кода. Спасибо.