2013-05-10 268 views
1

我试图迭代使用np.nditer()嵌套(numpy)数组。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,这样才能起作用?任何指针将不胜感激!

+0

嗯..好吧,我只是在Google上迭代了numpy数组,发现了nditer。然而,试图此时:在nested_array np_array = [] 对于i: B =阵列(nested_list).mean(轴= 1) 打印np_array.append(B) 我得到无 – 2013-05-10 14:44:44

+0

,但如果该阵列被嵌套(如上),那么我应该指向每个子列表,对吧?然后计算每个的均值并将其追加到np_array列表中? axis = 1指向什么?我是Python和numpy的初学者。 – 2013-05-10 14:54:01

回答

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级别。

+0

哇,非常整洁!十分感谢! – 2013-05-10 15:02:03