Давайте уменьшим N
до чего-то рационального и добавим несколько отпечатков:
print(row)
print(col)
print(a)
print(b)
Прогон:
0942:~/mypy$ python3 stack60813103.py
[0, 2, 3, 4, 6]
[[1, 3], [], [2], [1, 3, 5], [3], [], [0]]
[[0, 1, 0, 1, None, None], [0, 0, 0, 0, None, 0], [0, 0, 1, 0, None, 0], [0, 1, 0, 1, None, 1], [0, 0, 0, 1, None, 0], [0, 0, 0, 0, None, 0], [1, 0, 0, 0, None, None]]
[[0 array([[0.],
[0.],
[0.],
[0.],
[0.]]) 0
array([[0.],
[0.],
[0.],
[0.],
[0.]]) None
None]
[0 0 0 0 None 0]
[0 0 array([[0.],
[0.],
[0.],
[0.],
[0.]]) 0
None 0]
....
[0 0 0 0 None 0]
[array([[0.],
[0.],
[0.],
[0.],
[0.]]) 0 0 0
None None]]
Traceback (most recent call last):
File "stack60813103.py", line 38, in <module>
b[i, col[i]] = mydata[:, col[i]] # This instruction returns a ValueError
ValueError: shape mismatch: value array of shape (5,2) could not be broadcast to indexing result of shape (2,)
row
, col
и a
являются списками, b
является массивом типа dtype (из-за всех None
). Ваш l oop вставил кучу np.zeros((N,1))
массивов.
mydata
- это (N, 5) массив с плавающей точкой.
mydata[:, col[i]]
будет тогда (N, 2 ) когда col[0]
равно [1, 3]
; для других i
это может быть (N, 0) или (N, 1), (N, 3).
b[i, col[i]]
равно (2,) (или (0,), (1, ), (3)). Там довольно очевидное несоответствие форм. Вы не можете поместить битовый (N, 2) массив в (2,) слот.
Почему вы пытаетесь создать такой массив? Сочетание None
, чисел и массивов, имеющих такие формы, как (N, 1) и (N, 2)?
Я думаю, вам нужно добавить итерацию:
for j in col[i]:
b[i, j] = mydata[:, j]
Это должно присвоить (N,) массив элементу b[i,j]
b
.