如何将更多维度的数据应用于维度较小的函数?
假设我有几乎没有形状的阵列(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])
运作良好。但它似乎“不是一个笨拙的方式”。我使用的实际数据集有更多的维度,这意味着更多的嵌套循环。有没有更有效的方法来获得我想要的东西?