如何在Python中删除Nd矩阵中的零切片/图像?
我有一个维数为(256256100)的Nd矩阵如何在Python中删除Nd矩阵中的零切片/图像?,python,python-3.x,matrix,Python,Python 3.x,Matrix,我有一个维数为(256256100)的Nd矩阵a。其中,256x256为高度和宽度,100为图像/切片数。在100图像中,它们有一些图像为零(仅背景),其他图像为非零(包括背景和前景)。背景强度为0,前景强度为1。我想从矩阵A中删除/删除零个切片/图像。如何在python中高效地执行此操作 这是我的实现,但我认为我们可以做得更好 import numpy as np h, w, c = A.shape for i in range (c): A_slice=A[:,:,i] sum
a
。其中,256x256
为高度和宽度,100
为图像/切片数。在100
图像中,它们有一些图像为零(仅背景),其他图像为非零(包括背景和前景)。背景强度为0,前景强度为1。我想从矩阵A中删除/删除零个切片/图像。如何在python中高效地执行此操作
这是我的实现,但我认为我们可以做得更好
import numpy as np
h, w, c = A.shape
for i in range (c):
A_slice=A[:,:,i]
sum_in= np.sum(A_slice)
if (sum_in==0):
np.delete(A,A_slice)
更新:很抱歉,我遗漏了一项要求。我有一个向量
B
,形状为(100,)。它包含从1到100的每个切片的id。当我们移除矩阵A中的切片时,我还想移除向量B中的id/索引。感谢我们可以计算“零”图像的布尔掩码,如下所示
zero_mask = A.sum((0,1)) == 0
要删除相应的图像,我们可以使用
A = A[..., ~zero_mask]
B = B[~zero_mask]
我们可以计算“零”图像的布尔掩码,如下所示
zero_mask = A.sum((0,1)) == 0
要删除相应的图像,我们可以使用
A = A[..., ~zero_mask]
B = B[~zero_mask]
A=A[…,A.sum((0,1))!=0]
?很好的解决方案。我缺少一个要求。请稍候,我正在更新我已更新。你能看一下并回答吗?我会接受它,然后运行B=B[A.sum((0,1))!=0]
?我认为你应该运行B=…
,然后运行@Yakym的A=…
,或者使用@Yakym Pirozhenko的答案。A=A[…,A.sum((0,1))!=0]
?很好的解决方案。我缺少一个要求。请稍候,我正在更新我已更新。你能看一下并回答吗?我会接受它,然后运行B=B[A.sum((0,1))!=0]
?我想你应该运行B=…
,然后运行@Yakym的A=…
,或者使用@Yakym Pirozhenko的答案。这是我期望的解决方案。谢谢,这是我期望的解决方案。谢谢你