Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过二维数组作为索引范围在一维数组上显示Numpy视图_Python_Arrays_Numpy - Fatal编程技术网

Python 通过二维数组作为索引范围在一维数组上显示Numpy视图

Python 通过二维数组作为索引范围在一维数组上显示Numpy视图,python,arrays,numpy,Python,Arrays,Numpy,我有一个2D数组,它描述了一维数组的索引范围,如 z = np.array([[0,4],[4,9]]) 一维阵列 a = np.array([1,1,1,1,0,0,0,0,0,1,1,1,1]) 我想查看索引范围由z定义的一维数组。因此,仅针对第一个范围 a[z[0][0]:z[0][1]] 如何在所有范围内获得它?是否可以使用z定义的长度不等的as_跨步作为形状?我想避免复制数据,实际上我只想在一个不同的视图上进行进一步的计算 In [66]: a = np.array([1,1,

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

z = np.array([[0,4],[4,9]])
一维阵列

a = np.array([1,1,1,1,0,0,0,0,0,1,1,1,1])
我想查看索引范围由z定义的一维数组。因此,仅针对第一个范围

 a[z[0][0]:z[0][1]]
如何在所有范围内获得它?是否可以使用z定义的长度不等的as_跨步作为形状?我想避免复制数据,实际上我只想在一个不同的视图上进行进一步的计算

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])]
这些数组分别是视图。但它们并不是一个数组。长度不同,因此不能将其
v固定到(2,?)数组中。它们可以
hs固定
,但这不是视图

np.array\u 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))

忽略
swapax
位,这与我的列表理解是一样的。

因为窗口长度不规则,所以不认为这是可能的。那么
a[z[0][0]:z[0][1]
a[z[1][0]:z[1][1]有什么问题吗
等等?然后我也可以直接使用split和变更点作为分割点,在本例中是np.split(a,[4,9])。问题是什么更快?我认为split复制了数据,因此具有范围的for循环更快?np.split返回子数组(在本文中是视图)。如果
b=np.split(a[4,9])
a[1]=-1
,那么
b[0][1]=-1
for x, y in z:
    array_view = a[x:y]
    # do something with array_view