Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建应用于三维阵列中矢量的遮罩_Python - Fatal编程技术网

Python 创建应用于三维阵列中矢量的遮罩

Python 创建应用于三维阵列中矢量的遮罩,python,Python,我以前找不到一篇文章专门讨论如何在3D阵列中创建针对向量的遮罩。我只找到了以前的问题和答案,这些问题和答案要么只涉及如何将遮罩应用于3D数组中的单个元素,要么涉及2D数组中的向量。正如标题所说,这正是我希望在这里做的。我想从3D(x,y,z)数组中删除所有零向量,我能想到的唯一方法是创建两个for循环,它们同时运行在x和(y,:)上,如下面的代码所示。但是,这也不起作用,因为我在尝试运行此操作时收到错误消息 'list' object cannot be safely interpreted a

我以前找不到一篇文章专门讨论如何在3D阵列中创建针对向量的遮罩。我只找到了以前的问题和答案,这些问题和答案要么只涉及如何将遮罩应用于3D数组中的单个元素,要么涉及2D数组中的向量。正如标题所说,这正是我希望在这里做的。我想从3D(x,y,z)数组中删除所有零向量,我能想到的唯一方法是创建两个for循环,它们同时运行在x和(y,:)上,如下面的代码所示。但是,这也不起作用,因为我在尝试运行此操作时收到错误消息

'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))