numpy:迭代嵌套数组

时间:2013-05-10 14:35:16

标签: python-2.7 numpy iteration multidimensional-array

我试图使用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

...这有点扁平嵌套数组,所以我没有指向每个嵌套的子列表,而是指向每个值。我如何以某种方式使用nditer以便这样做?非常感谢任何指针!

1 个答案:

答案 0 :(得分:3)

[从评论中迁移]

我认为你制造的东西比他们需要的要难得多。数组有.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参数指定我们想要取平均值的数组的维度。

一般情况下 - 尽管并非总是如此 - 如果您发现自己使用for编写numpy个循环,那么您做错了。使用numpy时的基本规则是尝试对所有内容进行矢量化(即根据可以在整个阵列上执行的操作编写代码),这意味着在快速C库中完成了艰苦的工作而不是在缓慢的Python级别。