将多维数据应用于维度较小的函数的正确/有效方法

时间:2018-04-01 14:24:00

标签: python numpy scipy

如何将更多维度的数据应用于维度较小的函数?

假设我有几乎没有形状的阵列(5,100,300)。我在给定的轴上计算平均值

>>> import numpy as np
>>> from scipy.stats.stats import pearsonr
>>> data = np.zeros((5, 100, 300))
>>> means = data.mean(axis=1)
>>> means.shape
(5, 300)

我想计算平均值和每个元素之间的皮尔森相关性。我试过了:

q = pearsonr(data, means)
巫婆显然没有工作。所以我试着添加一个循环,希望它像许多其他numpy函数一样工作并沿轴应用函数(尽管缺少axis参数):

>>> pearson = np.empty((5, 100, 2))
>>> for index in range(100):
        pearson[:, index] = pearsonr(data[:, index], means)

得到了

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

明显的解决方法是添加另一个循环:

>>> for index in range(data.shape[0]):
        for subindex in range(data.shape[1]):   
            pearson[index, subindex] = pearsonr(data[index, subindex], means[index])

运作良好。但它似乎“不是一个笨拙的方式”。我使用的实际数据集有更多的维度,这意味着更多的嵌套循环。有没有更有效的方法来获得我想要的东西?

0 个答案:

没有答案