当某些数据丢失时,NumPy如何重塑?
使用以下源数据-当某些数据丢失时,NumPy如何重塑?,numpy,Numpy,使用以下源数据- In [53]: 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]
In [53]: 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]
...: ])
我可以按如下方式进行重塑,以使索引更方便-
In [62]: max = np.max(source_data, axis=0).astype(int)
In [63]: max
Out[63]: array([ 1, 1, 1, 17])
In [64]: three_d = np.ravel(source_data[:,3]).reshape((max[0]+1, max[1]+1, max[2]+1))
In [65]: three_d
Out[65]:
array([[[10, 11],
[12, 13]],
[[14, 15],
[16, 17]]])
但如果源数据中缺少行,例如-
In [68]: source_data2 = np.array([
...: [0, 0, 0, 10],
...: [0, 0, 1, 11],
...: [0, 1, 1, 13],
...: [1, 1, 0, 16],
...: [1, 1, 1, 17]
...: ])
将其转换为以下内容的最有效方法是什么
array([[[10, 11],
[nan, 13]],
[[nan, nan],
[16, 17]]])
重塑
工作,因为源数据
完整有序;您将忽略前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.]]])
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.]]])