python - 通过 2D 数组作为索引范围对 1D 数组进行 Numpy View

标签 python arrays numpy

我有一个二维数组,它描述一维数组的索引范围,例如

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_strided 作为形状?我想避免复制数据,实际上我只想对 a 进行不同的 View 以进行进一步的计算。

最佳答案

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])]

这些数组分别是 View 。但它们加在一起并不是一个数组。长度不同,因此它们不能被 vstacked 放入 (2,?) 数组中。它们可以hstacked,但这不会是一个 View 。

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 位,这与我的列表理解执行相同的操作。

关于python - 通过 2D 数组作为索引范围对 1D 数组进行 Numpy View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47547986/

相关文章:

numpy - k 最近邻中的 ValueError : setting an array element with a sequence at fit(X, y)

python - windows下用python修改文件创建/访问/写入时间戳

javascript - 多次执行函数按顺序替换部分参数

iphone - Swift:我需要获取 UIVIew 集合之一的索引才能知道哪个集合被点击

c++ - 无法理解 new 或 malloc 如何与 BYTE* 一起工作

python - 使用奇特的索引从 numpy 矩阵的每一列获取一个值

python - 计算两个日期之间的差异

python - 如何在matplotlib上生成一系列直方图?

python - Jupyter笔记本: interactive plot with widgets

python - 如何在 Python 中实现感知机?