如何从与一个数组的零元素对应的ndarray集合中删除列?

2024-04-20 07:38:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个形状的数组中的一些数据:

docLengths.shape = (10000,)
docIds.shape = (10000,)
docCounts.shape = (68,10000)

我想获得一些I的相对计数及其平均值和标准偏差:

docRelCounts = docCounts/docLengths
relCountMeans = docRelCounts[i,:].mean()
relCountDeviations = docRelCounts[i,:].std()

问题是,doclength的某些元素为零。这在docRelCounts中产生NaN元素,因此平均值和偏差也是NaN。你知道吗

我需要删除零长度文档的数据。我可以写一个循环,定位零长度的doc并删除它们,但我希望一些numpy数组魔法能更有效地做到这一点。有什么想法吗?你知道吗


Tags: 数据元素数组nanmean平均值计数形状
3条回答

使用nanmean和nanstd fromscipy.统计地址:

from scipy.stats import nanmean, nanstd

试试这个:

docRelCounts = docCounts/docLengths

goodDocRelCounts = docRelCounts[i,:][np.invert(np.isnan(docRelCounts[i,:]))]
relCountMeans = goodDocRelCounts.mean()
relCountDeviations = goodDocRelCounts.std()

np.isnan返回一个与True形状相同的数组,其中原始数组是NaN,其他地方是False。并且np.invert将其反转,然后得到goodDocRelCounts,其中只有非NaN的值。你知道吗

最后我做到了这一点(在我看到eumiro的答案之前,我已经解决了这个问题——它有点简单,但在其他方面没有更好,只是不同而已,所以我想我应该包括它:)

goodData = docLengths!=0  # find zero elements
docLen = docLen[goodData]
docCounts = docCounts[:,goodData]

docRelCounts = docCounts/docLen
means = map(lambda x:x.mean(), docRelCounts)
stds = map(lambda x:x.std(), docRelCounts)

相关问题 更多 >