【问题标题】:Slicing a matrix切片矩阵
【发布时间】:2021-06-17 23:28:15
【问题描述】:

这篇文章链接到这个post和这个one

我已经尝试了适用于小矩阵的建议函数。但我对大矩阵有疑问。

我正在尝试将 (1088, 1920) 切成 32x32 块,但它不起作用。

这些值在块中的排序与在原始矩阵中的排序不同。尽管输出数组的最终尺寸是正确的(2040、32、32)并且第一行的值是正确的;第一个块的第二行的值不是原始数组的[1, 0:32]。

我真的不知道问题出在哪里。会不会是内存/缓冲区问题?

问候

【问题讨论】:

  • 很难从你的描述中看出你想要什么。虽然 1920 是 60*32,但 1080 不是 32 的倍数。我不知道 2040 是从哪里来的。在您(和我们)可以轻松示例的小型阵列上测试您的想法是个好主意。链接的答案证明了这一点。
  • 正确的尺寸是1088我错了,我会改正

标签: python-3.x numpy matrix slice


【解决方案1】:

经过调查,r和h之间存在倒置。因此正确的函数是:

def split(array, nrows, ncols):
    """Split a matrix into sub-matrices."""

    r, h = array.shape
    return (array.reshape(r//nrows, nrows, -1, ncols)
                 .swapaxes(1, 2)
                 .reshape(-1, nrows, ncols))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 2017-07-26
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多