2

我有一个关于从数组中删除的问题。我有一个估计为 900^3 大小的 3-D numpy 数组(坐标为 z、y、x)。只有少数值是非零的,但它们具有非平凡的空间分布。我想删除该数组中只有零的所有二维切片。换句话说,我想要一个大小最小的数组,其中仍然包含所有相关数据。

我的尝试看起来像:

    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 空间中旋转阵列?

4

2 回答 2

0

您可以使用转置重新排列轴,但听起来您可能真的在寻找稀疏数组

于 2012-11-30T12:03:36.910 回答
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)

因此,abs(a)除了当前轴 == 当前 2D 切片之外,您需要检查它是否为零,这意味着它是空的。where给出删除的索引。

于 2012-12-02T19:59:51.953 回答