在Python中从Numpy数组中删除零

时间:2012-11-30 12:00:12

标签: python arrays numpy

我对从数组中删除有疑问。我有一个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空间中旋转数组?

2 个答案:

答案 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给出了删除的索引。