【发布时间】:2017-09-17 17:33:08
【问题描述】:
假设我有以下 numpy 向量
[[1, 3., 'John Doe', 'male', 'doc', '25'],
...,
[9, 6., 'Jane Doe', 'female', 'p', '28']]
我需要提取与我的任务相关的数据。
一般来说,作为 numpy 和 python 的新手,我会按照以下方式进行操作:
data = np.array(
[[1, 3., 'John Doe', 'male', 'doc', 25],
[9, 6., 'Jane Doe', 'female', 'p', 28]]
)
data_tr = np.zeros((data.shape[0], 3))
for i in range(0, data.shape[0]):
data_tr[i][0] = data[i, 1]
data_tr[i][1] = 0 if data[i, 3] == 'male' else 1
data_tr[i][2] = data[i, 5]
结果我得到了以下结果:
[[ 3., 0., 25.],
[ 6., 1., 28.]]
我想知道是否有更有效或更清洁的方法来执行此操作。
有人可以帮我吗?
【问题讨论】:
-
几个 cmets -
np.array是一个连续的对象,这意味着每个元素都必须是相同的类型,所以data的结果已经是一个字符串列表,因为你不能将“男性”和其他字符串编组为数字类型。最好使用列表。 -
看看
data。它是一个 (2,6) 字符串数组,而不是混合数字和字符串。另一方面,data_tr是默认的floatdtype。从data分配给data_tr时,numpy尝试将字符串转换为浮点数。在这种情况下,它可以工作。但是如果你弄错了列,它可能会出错。
标签: python python-3.x numpy