2012-12-05 112 views
2
columnFour = [data[0::, 1] == 1, data[0::, 4]] 

數據是一個表,其中1是我選擇的變量(它等於1)和4我想要的變量繪製成一維的數組。使用Numpy獲得矩陣內的數組的平均值

一些在4列中的值是空白的(「」),而我在Python得到的錯誤如下:

Traceback (most recent call last): 
File "<filename>", line 62, in <module> 
    print np.mean(age, dtype=float); 
File "D:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 2373, in mean 
    return _wrapit(a, 'mean', axis, dtype, out) 
File "D:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 37, in _wrapit 
    result = getattr(asarray(obj),method)(*args, **kwds) 
File "D:\Python27\lib\site-packages\numpy\core\numeric.py", line 235, in asarray 
    return array(a, dtype, copy=False, order=order) 
ValueError: cannot set an array element with a sequence 

我如何可以選擇所有的非空號在第4列中,還是選擇全部包括那些空值?我寧願選擇全部,但都可以工作。我試圖想出第4列中的平均數據以重新插入空值,但將它們平均分配到不同的第1列值。

例如第4列中的所有數字,其中column 1 == 1將得到平均值,然後在其中column 1 == 1將得到該平均值的空值重新插入。

編輯: 我用一個for循環來完成數據。

在數據x: 如果x [1] == '1' 和X [4]: first.append(np.float(X [4]))
如果x [1] ==如果x [1] =='3'和x [4]: third.append(np.float(x [4])) x [4]))

結果是三個數組具有我正在查找的不同值,然後可以將它們平均並放回到數據中的孔中。

+1

什麼樣的數組是數據?一個對象數組?它似乎有數字和字符串。還是全部是字符串? – tiago

+0

columnFour = [data [0 ::,1] == 1,data [0 ::,4]] 這條線沒有多大意義。你究竟想在這裏做什麼? >數據是一個表,其中1是我選擇的變量(它等於1),4是我試圖繪製成一維數組的變量。 你可以嘗試更清楚地解釋這一點嗎? – JoeZuntz

+0

數據是一個數字和字符串表,但我試圖處理的兩列都是數字。 我知道,列表理解是不好的。 我想選擇列4中的所有數字,其中列1 == 1. 我希望結果是一個數組,其中在每個列Four [x] [1]中的數字是1,並且在每列four [x ] [4]這個數字就是數據數組中那一行中的數字。 –

回答

0

我想你想要的東西,如:

mask = data[:, 1] == 1 
average = np.mean(data[mask, 4]) 

有一個在您所提供的代碼中沒有列表理解,你只是創建了有兩個因素,第一data[:, 1] == 1和第二data[:, 4]列表。

+0

我將繼續研究這個問題,但答案的第一行返回第一行'=='的布爾結果。 –

+0

yes mask是一個布爾數組,它是'=='比較的結果,我在第二行用它來索引數據。 –