繁体   English   中英

计算 3d numpy 数组中的非 nan 值

[英]Count non-nan-values in 3d numpy array

我有一个 N 2d numpy arrays 的列表,所有的大小都是相同的 Mx3,所有这些都代表 M 坐标的单个样本。 有时坐标的值可以是 np.nan。

我(我想我)知道如何计算这些坐标样本的平均值和标准偏差,即如下(即堆叠它们并计算平均值和沿轴 = 0 的标准差):

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

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

如何确定每个坐标的平均值和标准值所基于的计数,即每个坐标(分量) m的非 nan 值的数量?

结果应该是包含非 nan 计数值的维度 Mx3 的二维数组。

您可以创建一个掩码数组并将 0 和 1 相加,其中 0 表示实际值或 nan 值。

基本上,让我们假设您有一个带有一些随机 nan 值的 3D 数组,让我们计算沿某个轴的 nan 数(在您的情况下为轴 0):

#!/usr/bin/env ipython
# ----------------------------
import numpy as np

nx,ny,nz=50,50,50;npts=nx*ny*nz

n_nans=100
# ----------------------------
# Let us make a random array with number of NaN values n_nans 
A=np.random.random((nz,ny,nz))
i_nan=np.array(np.random.random((n_nans))*npts,dtype='int32')
dum = A.flatten();
dum[i_nan] = np.nan;
A=np.reshape(dum,np.shape(A))
# ----------------------------

A_nanmask=np.zeros(np.shape(A));A_nanmask[np.isnan(A)]=1;
A_notnanmask=np.ones(np.shape(A));A_notnanmask[np.isnan(A)]=0;
# -----------------------------
# Get some count of nans:
A_notnan = np.sum(A_notnanmask,axis=0)
A_nan = np.sum(A_nanmask,axis=0)

# Check the sums:
A_total = A_notnan+A_nan

因此,本例中的 A_total 应为 50。

您可以使用count_nonzero优于sum )以相同的方式执行此操作:

np.count_nonzero(~np.isnan(np.array(listOf2dArrays, dtype=np.float64)), axis=0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM