使用numpy获取切片后剩余的内容

时间:2016-12-07 17:46:49

标签: python python-3.x numpy

我有一个numpy矩阵,其中一行例如如下所示:

|0 1 2 3 4 5 6 7 8|

我可以得到一个阵列的某个部分,例如。我需要使用numpy切片[3,4,5]来实现一个目的a[0,3:6]

有什么内置的东西可以让我也得到不在那个范围内的所有东西吗?与[0,1,2,6,7,8]

一样

2 个答案:

答案 0 :(得分:3)

使用boolean indexing -

的一种方法
a[~np.in1d(np.arange(a.size),r)]

示例运行 -

In [174]: a
Out[174]: array([10, 11, 12, 13, 14, 15, 16, 17, 18])

In [175]: r
Out[175]: [3, 4, 5]

In [176]: a[~np.in1d(np.arange(a.size),r)]  # Without r
Out[176]: array([10, 11, 12, 16, 17, 18])

In [177]: a[r]  # With r
Out[177]: array([13, 14, 15])

另一位integer array indexing -

a[np.setdiff1d(np.arange(a.size),r)]

另一种方法是连接原始切片两侧的切片 -

np.concatenate((a[:r[0]], a[r[-1]+1:]))

答案 1 :(得分:2)

你的问题和例子中存在一些含糊之处。您是按价值还是索引选择元素?我们应该从字面上理解slice吗?

从字面上理解slice

In [10]: x=np.arange(10)   # stick with the ambiguous input for now
In [11]: x[3:6]
Out[11]: array([3, 4, 5])
如果按位置选择元素,

np.delete是一个方便的工具。这是一般目的,可以使用slice以及list输入:

In [13]: np.delete(x,slice(3,6))
Out[13]: array([0, 1, 2, 6, 7, 8, 9])
In [14]: np.delete(x,[3,4,5])
Out[14]: array([0, 1, 2, 6, 7, 8, 9])
如果您想按值选择元素,

np.in1d非常有用。

布尔遮罩也是一个很好的知识和使用工具。

delete根据输入使用不同的方法。对于一个简单的切片,我相信它使用相当于:

In [15]: np.concatenate((x[:3],x[6:]))
Out[15]: array([0, 1, 2, 6, 7, 8, 9])