【问题标题】:create special matrix python / numpy创建特殊矩阵 python / numpy
【发布时间】:2016-05-22 23:34:47
【问题描述】:

您好,我是 Python 新手,我需要创建一个非常特殊的矩阵(见上文)。它只是在每行重复 7 个不同的值,后跟零到行的末尾。每行后填充两个零并重复数组。当数组到达末尾时,它将从头开始直到 h0(2) 位于索引 [x,0] 处。之后另一个 h 以同样的方式开始 我认为天真的方法是使用带有计数器和中断的嵌套和循环。

在这篇文章中,已经提出了一个类似的问题: Creating a special matrix in numpy 但这并不是我所需要的。

有没有更聪明的方法来创建这个而不是像上一篇文章中的嵌套循环,或者这种矩阵是否有函数/名称?

【问题讨论】:

  • 欢迎来到 StackOverflow。请在您的问题中包含最小形式的代码。外部链接可能会关闭,然后您的问题不会帮助任何后续访问者。另请阅读正确的问题应包含哪些内容:MCVE
  • 我假设第二行中的第二个h_0(0) 应该是h_0(1)?
  • 结束标准有点模糊(它似乎依赖于行数,而不是h_x() 是否完成了“它的循环”),但我只是创建一个带有double for 循环:最实用、最直接的方式。为了提高效率,您可以将其包装在列表理解中。列表出现后,将其转换为 numpy 数组,然后将其重塑为 3N/2 乘 N。
  • 您所描述的内容看起来像是多个堆叠的Toeplitz matrices。您可以使用 scipy.linalg.toeplitz 和适当的零填充 h 向量创建单独的子矩阵,然后使用 np.vstack 按行连接它们。
  • 是的,Evert,你是对的,第二个h_0(0)应该是h_0(1)

标签: python numpy matrix


【解决方案1】:

我会专注于重复的模式,并尝试从块构建数组。

例如,我看到 3 组行,包含 h_0h_1h_2 元素。

在其中的每一个中,我看到一个重复的Hs = [h(0)...h(6)] 序列。

您几乎可以将[Hs, zeros(n), Hs, zeros(n),...] 连接到一个长的一维数组中,并将其重塑为(a,b) 行。

或者您可以创建一个A = np.zeros((a,b)) 数组,并将Hs 重复插入到正确的位置。如果Hs 环绕到下一行,则使用A.flat[x:y]=Hs。换句话说,即使A 是 2d,您也可以像插入 1d 一样插入 Hs 值(对于它的数据缓冲区来说也是如此)。

您的示例太复杂,无法在这么短的时间内给您一个准确的答案——而且我的注意力还不够长,无法弄清楚细节。但这可能会给你一些想法。寻找重复的模式和slices

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2022-11-02
    • 2011-11-07
    相关资源
    最近更新 更多