我有一个由第0到10列组成的数据集,我想提取仅在第1到5列中的信息,而不是第6列和第7列到第9列(这意味着不是最后一列)。到目前为止,我已经完成了以下工作:
A=B[:,[[1:5],[7:-1]]]
但是我得到了一个语法错误,我怎么才能得到数据呢?
谢谢
发布于 2018-08-08 08:38:52
高级索引不需要切片列表。相反,您可以使用numpy.r_
。此函数不接受负索引,但您可以使用np.ndarray.shape
绕过此问题
A = B[:, np.r_[1:6, 7:B.shape[1]-1]]
记住在第二部分中加1,因为a: b
不包含b
,同样,slice(a, b)
也不包含b
。还要注意,索引从0开始。
下面是一个演示:
import numpy as np
B = np.random.randint(0, 10, (3, 11))
print(B)
[[5 8 8 8 3 0 7 2 1 6 7]
[4 3 8 7 3 7 5 6 0 5 7]
[1 0 4 0 2 2 5 1 4 2 3]]
A = B[:,np.r_[1:6, 7:B.shape[1]-1]]
print(A)
[[8 8 8 3 0 2 1 6]
[3 8 7 3 7 6 0 5]
[0 4 0 2 2 1 4 2]]
发布于 2018-08-08 08:40:55
另一种方法是独立获取切片,然后连接:
A = np.concatenate([B[:, 1:6], B[:, 7:-1]], axis=1)
使用与@jpp类似的示例数据:
B = np.random.randint(0, 10, (3, 10))
>>> B
array([[0, 5, 0, 6, 8, 5, 9, 3, 2, 0],
[8, 8, 1, 7, 3, 5, 7, 7, 4, 8],
[5, 5, 5, 2, 3, 1, 6, 4, 9, 6]])
A = np.concatenate([B[:, 1:6], B[:, 7:-1]], axis=1)
>>> A
array([[5, 0, 6, 8, 5, 3, 2],
[8, 1, 7, 3, 5, 7, 4],
[5, 5, 2, 3, 1, 4, 9]])
发布于 2018-08-08 08:41:06
联合射程怎么样?
B[:, np.union1d(range(1,6), range(7,10))]
https://stackoverflow.com/questions/51737122
复制相似问题