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

如何统计3D NumPy数组中各坐标分量的非NaN值计数?

问题描述

有N个尺寸均为M×3的2D NumPy数组,每个数组代表包含M个坐标的单个样本,部分坐标值为np.nan。已知通过堆叠数组并沿axis=0计算均值和标准差的代码:

averaged = np.nanmean(np.array(listOf2dArrays, dtype=np.float64), axis=0)
std      = np.nanstd( np.array(listOf2dArrays, dtype=np.float64), axis=0)

需要生成一个尺寸为M×3的2D数组,其中每个元素对应对应坐标分量的非NaN值计数(即计算均值和标准差时用到的有效样本数量)。

解决方案

可以利用np.isnan结合求和操作实现,步骤如下:

  1. 先将数组列表堆叠为3D数组(形状为N×M×3),和之前计算均值/标准差的操作保持一致;
  2. 通过np.isnan标记所有NaN值,取反后得到非NaN值的布尔掩码;
  3. 沿样本维度(axis=0)对布尔掩码求和,即可得到每个坐标分量的非NaN值计数。

对应的代码:

# 堆叠为3D数组
stacked_arrays = np.array(listOf2dArrays, dtype=np.float64)
# 计算每个坐标分量的非NaN值数量
counts = (~np.isnan(stacked_arrays)).sum(axis=0)

说明

  • np.isnan(stacked_arrays)会生成一个和输入形状相同的布尔数组,其中NaN值对应True,非NaN值对应False;
  • ~运算符对布尔数组取反,此时非NaN值对应True(求和时会被当作1计算);
  • 沿axis=0求和,就是统计每个(M,3)位置上,N个样本中有多少个非NaN的有效数值,最终得到的counts数组尺寸为M×3,完全符合需求。

内容的提问来源于stack exchange,提问作者TheCat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:42:22