You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从对称二维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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:50:48