Python 创建应用于三维阵列中矢量的遮罩
我以前找不到一篇文章专门讨论如何在3D阵列中创建针对向量的遮罩。我只找到了以前的问题和答案,这些问题和答案要么只涉及如何将遮罩应用于3D数组中的单个元素,要么涉及2D数组中的向量。正如标题所说,这正是我希望在这里做的。我想从3D(x,y,z)数组中删除所有零向量,我能想到的唯一方法是创建两个for循环,它们同时运行在x和(y,:)上,如下面的代码所示。但是,这也不起作用,因为我在尝试运行此操作时收到错误消息Python 创建应用于三维阵列中矢量的遮罩,python,Python,我以前找不到一篇文章专门讨论如何在3D阵列中创建针对向量的遮罩。我只找到了以前的问题和答案,这些问题和答案要么只涉及如何将遮罩应用于3D数组中的单个元素,要么涉及2D数组中的向量。正如标题所说,这正是我希望在这里做的。我想从3D(x,y,z)数组中删除所有零向量,我能想到的唯一方法是创建两个for循环,它们同时运行在x和(y,:)上,如下面的代码所示。但是,这也不起作用,因为我在尝试运行此操作时收到错误消息 'list' object cannot be safely interpreted a
'list' object cannot be safely interpreted as an integer
此外,即使我确实以某种方式使该方法起作用,我知道使用双for循环将使该掩蔽过程非常耗时,因为最终我希望将其应用于数百万的数组大小。这就发展成为我的主要问题;实现这一目标的最快方法是什么
代码:
感谢您的回答,但我在Spyder中的变量资源管理器中看到的是对datanonzero的描述,即“numpy模块的ndarray对象”。我是Python新手,即使在谷歌搜索了这个术语之后,我仍然不知道这意味着什么,也不知道如何使用这种变量(也称为从中获取数据)。谢谢你的回答,但我在Spyder的变量浏览器中看到的是一个描述,其中对datanonzero说“nArray object of numpy module”。我是Python新手,即使在谷歌搜索了这个术语之后,我仍然不确定这意味着什么,或者如何使用这种变量(也就是从它获取数据)。
import numpy as np
data = np.array([[[0,0,0],[1,2,3],[4,5,6],[0,0,0]],[[7,8,9],[0,0,0],[0,0,0],[10,11,12]]],dtype=float)
datanonzero = np.empty([[],[]],dtype=float)
for maskclear1 in range(0,2):
for maskclear2 in range(0,4):
datanonzero[maskclear1,maskclear2,:] = data[~np.all(data[maskclear1,maskclear2,0:3] == 0, axis=0)
import numpy as np
data = np.array([[[0,0,0],[1,2,3],[4,5,6],[0,0,0]],[[7,8,9],[0,0,0],[0,0,0],[10,11,12]]],dtype=float)
flatten_data = data.reshape(-1, 3)
datanonzero = [ data[~np.all(vec == 0, axis=0)] for vec in flatten_data ]
datanonzero = np.reshape(datanonzero, (2,-1))