通过2D阵列作为索引范围的1D阵列的Numpy视图

时间:2017-11-29 08:16:55

标签: python arrays numpy

我有一个2D数组,它描述了一维数组的索引范围,如

z = np.array([[0,4],[4,9]])

1D阵列

a = np.array([1,1,1,1,0,0,0,0,0,1,1,1,1])

我希望在1D数组上查看由z定义的索引范围。所以,只针对第一个范围

 a[z[0][0]:z[0][1]]

如何获得所有范围?是否可以使用由z定义的不等长度as_strided作为形状?我想避免复制数据,实际上我只想要一个不同的视图进行进一步的计算。

2 个答案:

答案 0 :(得分:1)

In [66]: a = np.array([1,1,1,1,0,0,0,0,0,1,1,1,1])
In [67]: z = np.array([[0,4],[4,9]])

因此,从z行生成切片,我们得到2个数组:

In [68]: [a[x[0]:x[1]] for x in z]
Out[68]: [array([1, 1, 1, 1]), array([0, 0, 0, 0, 0])]

单独这些数组是视图。但它们在一起并不是一个阵列。长度为diff,因此它们不能vstacked成为(2,?)数组。它们可以是hstacked,但这不是一种观点。

np.array_split的计算核心是:

sub_arys = []
sary = _nx.swapaxes(ary, axis, 0)
for i in range(Nsections):
    st = div_points[i]
    end = div_points[i + 1]
    sub_arys.append(_nx.swapaxes(sary[st:end], axis, 0))

忽略swapaxes位,这与我的列表理解完全相同。

答案 1 :(得分:1)

for x, y in z:
    array_view = a[x:y]
    # do something with array_view