我对从数组中删除有疑问。我有一个3-D numpy数组(坐标是z,y,x),估计大小为900 ^ 3。只有少数值非零,但它们具有非平凡的空间分布。我想删除该数组中只有零的所有2-D切片。换句话说,我想要一个最小尺寸的数组,其中仍然包含所有相关数据。
我的尝试看起来像:
while np.all(a[0]==0):
a=np.delete(a,0,0)
while np.all(a[a.shape[0]-1]==0) and a.shape[0]>1:
a=np.delete(a,-1,0)
似乎适用于z方向。如何在其他两个方向做同样的事情?还有其他方法可以做得更好吗?
另一个想法是
tmp=np.delete(tmp,np.all(tmp==0,axis=1),1)
但是那个似乎只是从一开始就有效,最后会留下零。
是否有可能在3D空间中旋转数组?
答案 0 :(得分:0)
您可以使用transpose重新排列轴,但听起来您可能真的在寻找sparse array
答案 1 :(得分:0)
这是一个有趣的问题,这是我想出的:
for ax in range(3):
all_but_ax = [i for i in range(3) if i != ax]
a = delete(a, where(apply_over_axes(sum, abs(a), all_but_ax).ravel() == 0),
ax)
所以除了当前的轴==当前的2D切片之外,你有一些abs(a)
,并检查它是否为零,这意味着它是空的。 where
给出了删除的索引。