2015-02-17 76 views
0

矩陣比方說,我有一個字符表,希望對數字進行操作:蟒蛇,操作與角色

import numpy 
pru=numpy.matrix([['a', 'a','w','a'],[1, 2,4,5],[3, 4,1,2]]) 

type(pru) 

numpy.matrixlib.defmatrix.matrix

a=pru[1:3,0] 
b=a - a[0] 

我收到以下錯誤:

unsupported operand type(s) for -: 'matrix' and 'matrix'

但是,如果我創建另一個模糊字符的矩陣,我可以進行減法,但對象的「類型」仍然相同:

pru=numpy.matrix([[1, 2,4,5],[3, 4,1,2]]) 
type(pru) 

numpy.matrixlib.defmatrix.matrix

a=pru[:,0] 
b=a - a[0] 

我也得到正確的結果。

所以將它轉換爲浮動我做的:

a=a.astype(float) 

但我不希望被轉換元件,每次我需要它的每個部分。我想在一個對象中有不同類型的元素(比如R中的data.frames)。這在Python中可能嗎?

+0

你確定'a = pru [:1:3,0]'正在做你認爲/想要的嗎?這是一個錯字嗎? – aganders3 2015-02-17 20:34:29

回答

0

您必須添加numpy.object,就像這樣:

pru=numpy.matrix([['a', 'a','w','a'],[1, 2,4,5],[3, 4,1,2]], dtype=numpy.object) 

然後:

a=pru[1:3,0] 
print a - a[0] 

它打印:

matrix([[0], 
     [2]], dtype=object) 
1

如果你正在尋找一個Python中的數據框對象,你應該使用pandas,而不是numpy。 這將使您更好地支持標記的行和列,並允許更輕鬆地混合數據類型。 在Pandas中,相同類型的列是存儲的,因此我已將您的數據轉換爲將每個數據類型放在每列中。 下面是該操作將是什麼樣子的熊貓:

from pandas import DataFrame 
pru = DataFrame([['a', 1, 3], ['a', 2, 4], ['w', 4, 1], ['a', 5, 2]]) 
a = pru[[1,2]].ix[0] 
b = a - a[1] 
b 

此外,使用numpy的時候,你會經常發現,對於ndarray類的接口更加發達和維護良好的比基體類。 如果你想製作一個包含複合類型的數組,你可以使用numpy的dtype system