我最近偶然发现了一个我不理解的奇怪的numpy行为:我有一个实验列表。每个实验本身也是样本列表。所以我最终得到了一份清单。实验在各种条件下进行,因此其中一些包含的样品多于其他样品。它们的共同之处在于它们包含100多个样本。
现在我想计算每个实验样本的平均值和标准差。对我有用的是
sDevPD = [np.std(x) for x in f0PD]
我简单地遍历我的实验列表f0PD
中的所有列表。好的,现在我尝试使用numpy:
sDevPD = np.std(f0PD, axis = 1)
这不起作用,numpy将抛出IndexError: tuple index out of range
。我试图尽可能地追踪错误,并且我发现只有在实验大小不同时,numpy函数才会抛出此错误。如果我有一个长度相同的列表列表,一切正常。这同样适用于np.mean
。
有人可以向我解释一下这种行为吗?我认为计算不同大小的列表的标准差是绝对合法的。
答案 0 :(得分:1)
Numpy实际上是一个矩阵库。它对可变长度数组不起作用。所有操作都必须能够进行广播,而在您的示例中并非如此...尝试使用Pandas而不是使用Numpy。它依赖于基本操作的numpy。例如:
import pandas as pd
import numpy as np
f0PD = []
for _ in range(10): # here I assume f0PD is a list of 10 lists
f0PD.append(np.arange(np.random.randint(20))) # this creates lists of random size, up to 20
df = pd.DataFrame(f0PD)
df.std(axis=1) # this works well, regardless of the size of elementary lists