python - 获取满足特定形状和步幅约束的 ndarray View

标签 python numpy

如果我有一个 numpy ndarray,例如 A,其数据缓冲区是 C 连续的。现在我想获得这个矩阵的 View ,具有已知的偏移量、形状和步幅,我该怎么做?

例如,如果我有:

import numpy
A = numpy.zeros((100, 100))

假设我想得到一个矩阵B,它是A的 View ,其相对于A的偏移量是880字节,对于形状 (10, 20) 和步幅 (8, 800),我可以执行以下操作:

B = A[1:21, 10:20].T

有没有一种方法可以在一般情况下获得这样的 View 矩阵?我想有三种可能的方法,其中任何一种都对我有好处:

  1. 提出像上面这样的一系列变换来构造 View 矩阵B的一般过程?
  2. 使用手动指定的起始地址、偏移量、形状和步幅构造一个 ndarray?
  3. 我在 C++ 中有上述四个东西,所以我也可以调用 Python C API 来构造这样的 ndarray。

顺便说一句,我还想知道B的哪个属性记录了它相对于A的起始地址的偏移量?

最佳答案

如果您想完全控制一切,可以使用np.ndarray直接构造函数,并执行以下操作:

B = np.ndarray(shape=(10, 20), dtype=A.dtype, buffer=A, offset=880,
               strides=(8, 800))

关于python - 获取满足特定形状和步幅约束的 ndarray View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28446805/

相关文章:

python - future 警告 : Method . ptp

python - 从另一个数组更新 numpy 二维数组索引

Python:为很多函数提供参数转换

python - 如何从文本文件中随机删除 100 个 block

python - 在 django 1.6 中使用多个数据库会出现 "can' t do subqueries”错误

python - 将数据分配给单独的数据框,按年份组合和排序

python - 对 numpy 数组进行向量化操作

python - 具有高精度数字的 numpy.fft.fft 的意外行为

python - scipy.ndimage.filter.laplace() 中使用的拉普拉斯掩码/内核是什么?

python - 嵌入 matplotlib 图形并更改其大小