我有一个2D数组,该数组描述了1D数组的索引范围,例如
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形式定义的不等长度使用为_STRED?我想避免复制数据,实际上我只需要在A上进行其他视图以进行进一步计算。
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])]
单独的这些数组是视图。但是在一起,它们不是一个阵列。长度差异,因此它们不能将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
位,这与我的列表理解一样。
for x, y in z:
array_view = a[x:y]
# do something with array_view