蟒蛇,操作与角色

问题描述:

矩阵比方说,我有一个字符表,希望对数字进行操作:蟒蛇,操作与角色

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

您必须添加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) 

如果你正在寻找一个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