Я пытаюсь сделать следующее: у меня есть трехмерный массив X формы (Z, M, N). У меня есть отдельный одномерный массив Y формы (M), содержащий целочисленные значения, где значения больше 0 представляют строки в X, для которых я хочу установить соответствующее значение в Y. Например, см. Следующие сценарии:
X =
[[[0. 0.]
[0. 0.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]]
Y =
[0 1]
должен вернуть:
[[[0. 0.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]]
или когда Y = [0 0]
, должно возвращаться:
[[[0. 0.]
[0. 0.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]]
Следующий код работает для первого сценария, но вызывает следующую ошибку во втором сценарии, которую я не могу решить. Я использую Python 3.6.8 в Windows 10 Pro.
Traceback (most recent call last):
File "blah2.py", line 41, in <module>
r[np.where(y>0), :] = y[np.where(y>0)]
ValueError: shape mismatch: value array of shape (0,) could not be broadcast to indexing result of shape (1,0,2)
import numpy as np
x = np.ones((5, 2, 2))
y = np.array([0, 0])
r = np.zeros((2,2))
r[np.where(y>0), :] = y[np.where(y>0)]
x[0] = r
print(x)