假设我有以下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.]]
我想知道的是,是否有更有效或更清洁的方式来执行该操作 有人可以帮帮我吗?
答案 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]