2013-05-10 197 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