在Python for for

时间:2017-08-31 18:26:47

标签: python python-3.x numpy

假设我有一个函数(称为numpyarrayfunction),每次运行它时都会输出一个数组。我想多次运行该函数并存储生成的数组。显然,我正在使用的当前方法 -

numpyarray = np.zeros((5))
for i in range(5):
    numpyarray[i] = numpyarrayfunction

生成错误消息,因为我试图在数组中存储数组。

最后,我想要做的是取数组中数字的平均值,然后取这些平均值的平均值。但就目前而言,了解如何存储数组会很有用!

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我最初误读了for循环中的内容。您收到错误的原因是因为numpy数组默认只存储数字类型,而numpyarrayfunction返回一个非数字值(来自名称,可能是另一个numpy数组)。如果该函数已经返回一个完整的numpy数组,那么你可以做更多这样的事情:

arrays = []
for i in range(5):
  arrays.append(numpyarrayfunction(args))

然后,您可以像这样取平均值:

avgarray = np.zeros((len(arrays[0])))
for array in arrays:
  avgarray += array
avgarray = avgarray/len(arrays)

答案 1 :(得分:3)

正如评论和其他答案已经提出的那样,一个好方法是将numpyarrayfunction返回的数组存储在普通的Python列表中。

如果您希望所有内容都在一个numpy数组中(例如,内存效率或计算速度),并且numpyarrayfunction返回的数组具有固定长度n,您可以制作numpyarray多维:

numpyarray = np.empty((5, n))
for i in range(5):
    numpyarray[i, :] = numpyarrayfunction

然后你可以np.average(numpyarray, axis = 1)对第二个轴进行平均,这将为你提供一个一维数组,其中包含从numpyarrayfunction获得的每个数组的平均值。 np.average(numpyarray)将是所有元素的平均值,如果您真的想要平均值的平均值,则为np.average(np.average(numpyarray, axis = 1))

更多关于numpy array indexing