In [512]: source_data = np.array([
...: ...: [0, 0, 0, 10],
...: ...: [0, 0, 1, 11],
...: ...: [0, 1, 0, 12],
...: ...: [0, 1, 1, 13],
...: ...: [1, 0, 0, 14],
...: ...: [1, 0, 1, 15],
...: ...: [1, 1, 0, 16],
...: ...: [1, 1, 1, 17]
...: ...: ])
reshape
работает, потому что source_data
завершен и в порядке; вы игнорируете координаты в первых 3 столбцах.
Но мы можем использовать их с:
In [513]: arr = np.zeros((2,2,2), int)
In [514]: arr[source_data[:,0], source_data[:,1], source_data[:,2]] = source_data[:,3]
In [515]: arr
Out[515]:
array([[[10, 11],
[12, 13]],
[[14, 15],
[16, 17]]])
Мы можем сделать то же самое со следующим источником:
In [516]: source_data2 = np.array([
...: ...: [0, 0, 0, 10],
...: ...: [0, 0, 1, 11],
...: ...: [0, 1, 1, 13],
...: ...: [1, 1, 0, 16],
...: ...: [1, 1, 1, 17]
...: ...: ])
заполните цель nan
:
In [517]: arr = np.full((2,2,2), np.nan)
In [518]: arr
Out[518]:
array([[[nan, nan],
[nan, nan]],
[[nan, nan],
[nan, nan]]])
In [519]: arr[source_data2[:,0], source_data2[:,1], source_data2[:,2]] = source_data2[:,3]
In [520]: arr
Out[520]:
array([[[10., 11.],
[nan, 13.]],
[[nan, nan],
[16., 17.]]])