在numpy中提取和转换数据

时间:2017-09-17 17:33:09

标签: python python-3.x numpy

假设我有以下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.]]

我想知道的是,是否有更有效或更清洁的方式来执行该操作 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:5)

使用column-indexing -

的一种方法
data_tr = np.zeros((data.shape[0], 3))
data_tr[:,[0,2]] = data[:, [1,5]]
data_tr[:,1] = data[:,3]=='male'

请注意,步骤:data_tr[:,[0,2]] = data[:, [1,5]]正在处理相应列的副本。这些对于作业和提取来说效率不高。所以,您可能希望在两个单独的步骤中执行此操作,主要是为了提高性能,如此 -

data_tr[:,0] = data[:, 1]
data_tr[:,2] = data[:, 5]