这是一个简单的问题,但假设我有一个MxN矩阵。我想要做的就是提取特定的列并将它们存储在另一个numpy数组中,但我得到了无效的语法错误。
以下是代码:
extractedData = data[[:,1],[:,9]].
看起来上面的行应该就足够了,但我猜不是这样。我找了一圈,但在语法上没有找到关于这种特定情况的任何信息。
我假设您想要选择第1
列和第9
列?
要同时选择多个列,请使用
X = data[:, [1, 9]]
要逐个选择,请使用
x, y = data[:, 1], data[:, 9]
带有名称:
data[:, ['Column Name1','Column Name2']]
你可以从 data.dtype.names
获取名称...
假设您想要使用该代码片段获取第1列和第9列,那么应该这样写:
extractedData = data[:,[1,9]]
如果您只想提取其中的一些列:
idx_IN_columns = [1, 9]
extractedData = data[:,idx_IN_columns]
如果您想排除特定的列:
idx_OUT_columns = [1, 9]
idx_IN_columns = [i for i in xrange(np.shape(data)[1]) if i not in idx_OUT_columns]
extractedData = data[:,idx_IN_columns]
只是:
>>> m = np.matrix(np.random.random((5, 5)))
>>> m
matrix([[0.91074101, 0.65999332, 0.69774588, 0.007355 , 0.33025395],
[0.11078742, 0.67463754, 0.43158254, 0.95367876, 0.85926405],
[0.98665185, 0.86431513, 0.12153138, 0.73006437, 0.13404811],
[0.24602225, 0.66139215, 0.08400288, 0.56769924, 0.47974697],
[0.25345299, 0.76385882, 0.11002419, 0.2509888 , 0.06312359]])
>>> m[:,[1, 2]]
matrix([[0.65999332, 0.69774588],
[0.67463754, 0.43158254],
[0.86431513, 0.12153138],
[0.66139215, 0.08400288],
[0.76385882, 0.11002419]])
列的顺序不需要按顺序:
>>> m[:,[2, 1, 3]]
matrix([[0.69774588, 0.65999332, 0.007355 ],
[0.43158254, 0.67463754, 0.95367876],
[0.12153138, 0.86431513, 0.73006437],
[0.08400288, 0.66139215, 0.56769924],
[0.11002419, 0.76385882, 0.2509888 ]])
我想指出的一件事是,如果您要提取的列数为1,则结果矩阵不会是您期望的Mx1矩阵,而是一个包含所提取列元素的数组。
要将其转换为矩阵,应在结果数组上使用reshape(M,1)方法。
data [:,8:9]
。这将获取第八列,但不会删除额外的维度。 - Jan Kukacka当使用类似这样的列表从N-D数组中选择列时,您还需要注意一件事:
data[:,:,[1,9]]
print data.shape # gives [10,20,30]
selection = data[1,:,[1,9]]
print selection.shape # gives [2,20] instead of [20,2]!!
extracted_data = data.ix[:,['Column1','Column2']]
columns = [0] + [x for x in range(4,62-3)]
print(columns)
selected_data = train_data[:,columns]
我无法编辑所选答案,因此我添加了一个答案以澄清使用整数索引似乎返回视图(而不是副本),而使用列表则返回副本。
>>> x = np.zeros(shape=[2, 3])
>>> y = x[:, [0, 1]]
>>> z1, z2 = x[:, 0], x[:, 1]
>>> y[0, 0] = 1
>>> print(y)
[[1. 0.]
[0. 0.]]
>>> print(x)
[[0. 0. 0.]
[0. 0. 0.]]
>>> z1[0] = 2
>>> print(z1)
[2. 0.]
>>> print(x)
[[2. 0. 0.]
[0. 0. 0.]]
我认为这里的解决方案不再适用于新版本的Python,使用一个新的Python函数来完成它是一种方法:
extracted_data = data[['Column Name1','Column Name2']].to_numpy()
这将为您提供所需的结果。
a
到b
提取所有列,请尝试X = data[:, range(a, b + 1)]
。 - Daniel