Python中如何提取np.array特定条件值且保留原数组形状
解决办法
你遇到的问题是np.extract会把符合条件的元素都拉成一维数组,直接丢了原图像的二维结构。要保留原始位置,试试下面两种方法:
方法1:把不符合条件的元素换成特定值(保留原形状)
直接在原数组的基础上,把小于等于阈值的元素换成0或者NaN,这样数组还是(512,512)的形状,能直接用来查看图像:
import numpy as np # 先计算阈值 threshold = np.max(D1) * 0.05 # 复制原数组,避免修改原始数据 D1_processed = D1.copy() # 把不符合条件的元素换成0(换成np.nan也可以,看你可视化需求) D1_processed[D1 <= threshold] = 0 # 现在D1_processed还是(512,512),直接拿去画图就行
如果换成np.nan,用matplotlib画图的时候,这些NaN区域会自动显示成空白或者特定颜色,也能清晰看到有效区域的位置。
方法2:用布尔掩码操作
先生成和原数组同形状的布尔掩码(符合条件的位置是True,不符合是False),之后可以用掩码来生成保留结构的数组,或者直接在可视化时用:
threshold = np.max(D1) * 0.05 # 生成掩码 mask = D1 > threshold # 方式一:生成保留原结构的数组,不符合条件的位置设为0 D1_masked = D1 * mask # 布尔值和数值相乘,False会自动转成0 # 方式二:可视化时直接叠加掩码 import matplotlib.pyplot as plt plt.imshow(D1, cmap='gray') # 把不符合条件的区域用半透明白色覆盖 plt.imshow(np.where(mask, np.nan, 1), cmap='gray', alpha=0.5) plt.show()
简单说,np.extract就是专门用来提取一维元素的,要保留二维结构就别用它,直接在原数组上做修改或者用掩码就好。
内容的提问来源于stack exchange,提问作者vintz
相关产品推荐
相关产品推荐

