为NumPy数组的每一行上的操作定义一个for循环

时间:2018-07-27 15:04:36

标签: python numpy for-loop

我有一个长度(L)的数据集,我将其命名为“数据”。

data=raw_data.iloc[:,0]

我从“数据”中随机生成了2000个样本系列,并将其命名为“重采样”,以使len = 2000的NumPy矩阵和“数据”的cols = L。

resamples=[np.random.choice(data, size=len(data), replace=True) for i in range (2000)]

下面的代码使用单个数组“ data”显示Scipy.stats中的两个操作。现在,我需要通过定义一个for循环,对每个样本系列(2000行)执行相同的操作。面临的挑战是,第一步需要计算两个参数(位置和比例),应该将它们用于每一行以执行下一个参数。我的知识不足以定义这样的for循环。我想知道是否有人可以帮助我。

loc, scale=stats.gumbel_r.fit(data)

return_gumbel=stats.gumbel_r.ppf([0.9999,0.9995,0.999],loc=loc, scale=scale)

1 个答案:

答案 0 :(得分:1)

描述有些不清楚,但我认为您只需要:

alist = []
for data in resamples:
   loc, scale=stats.gumbel_r.fit(data)
   return_gumbel=stats.gumbel_r.ppf([0.9999,0.9995,0.999],loc=loc, scale=scale)
   alist.append(return_gumbel)
arr = np.array(alist)

您还可以先创建arr,然后将return_gumbel分配给相应的行,但是列表追加的速度大致相同。循环也可以写成列表理解。

有人谈论vectorizing,但是考虑到计算的复杂性,我怀疑这样做是否可行-至少在不深入研究那些stats函数的细节的情况下,这是不可行的。在numpy中,vectorizing的意思是编写一个函数,使其一次可处理数组的所有行,并以已编译的numpy代码执行操作。