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