从对称二维NumPy数组构建同维度非零值二维数组
解决方案
要生成和原对称NumPy数组同维度的新数组,仅保留非零值、排除零值,可以用以下几种简单方法:
方法1:布尔索引替换零值
先创建原数组的副本,再将所有零值替换为NaN(或你需要的其他占位符),既保留数组维度,又排除了零值:
import numpy as np # 确保A是NumPy数组(如果原数据是列表需先转换) A = np.array([[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 15351., 4299., 1738.], [0., 0., 0., ..., 0., 12393., 4374.], [0., 0., 0., ..., 0., 0., 15632.]]) # 创建副本并替换零值为NaN B = A.copy() B[B == 0] = np.nan
方法2:使用np.where直接生成新数组
np.where可根据条件返回对应值,完美适配你的需求:
# 非零位置保留原数值,零位置替换为NaN B = np.where(A != 0, A, np.nan)
补充说明
你之前用np.nonzero没成功,是因为np.nonzero(A)返回的是非零元素的行/列索引数组,用来提取非零元素而非生成同维度数组。如果需要提取所有非零元素的值,可以用A[np.nonzero(A)],但这会得到一维数组,不符合你要同维度的要求。
如果不想用NaN,也可以将零位置替换为其他标记值(比如-1),只需把代码里的np.nan换成对应值即可。
内容的提问来源于stack exchange,提问作者user3901294
相关产品推荐
相关产品推荐

