Numpy:迭代嵌套数组



我尝试使用np.nditer()迭代嵌套的(numpy)数组。

将一个嵌套的int型列表转换为一个嵌套的numpy数组。

from numpy import mean, array, nditer
nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
np_array = []
for i in nested_list:
    a = array(nested_list)
np_array.append(a)

以上工作,产生;

[array([[1,2,3],
       [2,3,4],
       [3,4,5],
       [4,5,6]])]

我想计算每个嵌套子列表的平均值…我已经试过了,但是不能正常工作。

np_mean = []
c = 0
for i in nditer(np_array):
    m = mean(i)
    np_mean_rep.append(m)
    c += 1
print np_mean_rep

…这有点扁平化嵌套数组,所以I不指向每个嵌套子列表,而是指向每个值。我该如何使用编辑器才能让它工作呢?任何指针将非常感激!

[从注释中迁移]

我认为你把事情复杂化了。数组有一个.mean()方法,您不必逐行构建对象。你可以一次做完。

>>> import numpy as np
>>> nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
>>> np.array(nested_list)
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])
>>> np.array(nested_list).mean(axis=1)
array([ 2.,  3.,  4.,  5.])
>>> np.array(nested_list).mean(axis=0)
array([ 2.5,  3.5,  4.5])

axis参数指定我们要取数组的哪个维度的平均值。

一般来说——虽然不是总是——如果你发现自己用numpyfor循环,你做错了什么。使用numpy时的基本规则是尝试向量化所有内容(即根据可以一次在整个数组上执行的操作编写代码),这意味着艰苦的工作是在快速的C库中完成的,而不是在缓慢的Python级别。

相关内容

  • 没有找到相关文章

最新更新