得到指数在numpy

时间:2013-11-13 02:59:51

标签: python-3.x numpy

有人可以找出下面的代码有什么问题吗?

import numpy as np
data = np.recfromcsv("data.txt", delimiter=" ", names=['name', 'types', 'value'])
indices = np.where((data.name == 'david') * data.types.startswith('height'))
mean_value = np.mean(data.value[indices])

我想计算大卫的重量和身高的平均值并标记如下:

david>> mean(weight_2005 and weight_2012), mean (height_2005 and height_2012)
mark>> mean(weight_2005 and weight_2012), mean (height_2005 and height_2012)

来自text(data.txt)文件:

david weight_2005 50
david weight_2012 60
david height_2005 150
david height_2012 160
mark weight_2005 90
mark weight_2012 85
mark height_2005 160
mark height_2012 170

我正在使用python 3.2和numpy 1.8

上面的代码提供了类型错误,如下所示:

TypeError: startswith first arg must be bytes or a tuple of bytes, not numpy.str_

1 个答案:

答案 0 :(得分:1)

使用Python3.2和numpy 1.7,这行可以使用

indices = np.where((data.name == b'david') * data.types.startswith(b'height'))

data显示为:

rec.array([(b'david', b'weight_2005', 50),...], 
      dtype=[('name', 'S5'), ('types', 'S11'), ('value', '<i4')])

type(data.name[0])<class 'bytes'>

b'height'也适用于Python2.7。


另一种选择是将所有数据转换为unicode(Python 3字符串)

dtype=[('name','U5'), ('types', 'U11'), ('value', '<i4')]
dataU=data.astype(dtype=dtype)
indices = np.where((dataU.name == 'david') * dataU.types.startswith('height'))

data = np.recfromtxt('data.txt', delimiter=" ", 
    names=['name', 'types', 'value'], dtype=dtype)

recfromcsv看起来不是dtype,而是recfromtxt。{/ p>