Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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_Numpy - Fatal编程技术网

Python 如何从三维阵列中删除周围的空数据

Python 如何从三维阵列中删除周围的空数据,python,numpy,Python,Numpy,我有一个形状为(136、512、512)的数组。这个数组包含0和1,表示这个三维空间中的对象形状。我试图通过删除数组的空切片来减小数组的大小。基本上,我想保留数组中的所有1,但删除不必要的行和列,同时保持数组的矩形,类似于hitbox或类似的东西。例如: (0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0,

我有一个形状为(136、512、512)的数组。这个数组包含0和1,表示这个三维空间中的对象形状。我试图通过删除数组的空切片来减小数组的大小。基本上,我想保留数组中的所有1,但删除不必要的行和列,同时保持数组的矩形,类似于hitbox或类似的东西。例如:

(0, 0, 0, 0, 0,

0, 0, 0, 1, 0,

0, 1, 1, 1, 0,

0, 1, 0, 1, 0,

1, 1, 0, 1, 0,

1, 0, 0, 1, 0,

0, 1, 1, 1, 0,

0, 0, 0, 0, 0)
将成为:

(0, 0, 0, 1,

0, 1, 1, 1,

0, 1, 0, 1,

1, 1, 0, 1,

1, 0, 0, 1,

0, 1, 1, 1)
但是在三维尺度上

(很抱歉,格式太糟糕了,我对此很糟糕。)

这仅仅是因为pyplot似乎无法用体素绘制如此大的3d图形,或者至少在我的计算机上需要很长时间。所以,如果有人知道如何进行大规模的3d绘图,那就太好了

编辑 为了澄清,该示例仅为2d示例,但要在3d中执行此操作,必须考虑所有其他行/列,因为每个正方形必须具有相同的形状。不确定这是否有意义,很难用这么多的维度来解释


可以将其视为从立方体中心每侧最外层的1之外移除任何东西。

编辑:要仅移除周围的括号,请阅读


您可以使用和来实现这一点

将numpy导入为np
l=[[0,0,0,0,0],
[0, 0, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 1, 0, 1, 0],
[1, 1, 0, 1, 0],
[1, 0, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]]
arr=np.数组(l)
arr1=np.delete(arr,np.all(arr[…,:]==0,axis=0,axis=1)#删除所有0值列
arr2=np.delete(arr1,np.all(arr1[…,:]==0,axis=1,axis=0)#删除所有0值行
打印(arr)
打印(arr2)
输出


同样也可以扩展到3D阵列。

编辑:要仅删除周围的括号,请阅读


您可以使用和来实现这一点

将numpy导入为np
l=[[0,0,0,0,0],
[0, 0, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 1, 0, 1, 0],
[1, 1, 0, 1, 0],
[1, 0, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]]
arr=np.数组(l)
arr1=np.delete(arr,np.all(arr[…,:]==0,axis=0,axis=1)#删除所有0值列
arr2=np.delete(arr1,np.all(arr1[…,:]==0,axis=1,axis=0)#删除所有0值行
打印(arr)
打印(arr2)
输出


同样也可以扩展到3D阵列。

这能解决您的问题吗?看起来你想做一个切片,
arr[1:-1,0:-1]
省略了最后一列以及第一行和最后一行。我添加了我认为你想要的内容,所以上面链接的问题几乎是重复的。@mandulaj是的,谢谢。这能解决你的问题吗?看起来你想做一个切片,
arr[1:-1,0:-1]
省略了最后一列以及第一行和最后一行。我添加了我认为符合你的要求的内容,所以上面链接的问题几乎是重复的。@mandulaj是的,谢谢。OP说他想要“保留数组中的所有1,但在保留数组矩形的同时删除不必要的行和列”。但是,如果OP需要的话,我也可以添加它。我认为他们只想删除外部(“周围”)零。我认为这种方法会删除所有零行/列吗?这在3D环境中对我的问题有效吗(请参见编辑)。如果编辑对您没有意义,请告诉我。@Bill yes,我想您理解了。OP说他希望“保留数组中的所有1,但删除不必要的行和列,同时保持数组为矩形”。但是,如果OP需要,我也要添加它。我想他们只想删除外部('rounding')零。我认为此方法将删除所有零行/列?这在3D环境中是否适用于我的问题(请参阅编辑)。如果编辑对您没有意义,请告诉我。@Bill是的,我想您理解。
[[0 0 0 0 0]
 [0 0 0 1 0]
 [0 1 1 1 0]
 [0 1 0 1 0]
 [1 1 0 1 0]
 [1 0 0 1 0]
 [0 1 1 1 0]
 [0 0 0 0 0]]
[[0 0 0 1]
 [0 1 1 1]
 [0 1 0 1]
 [1 1 0 1]
 [1 0 0 1]
 [0 1 1 1]]