【问题标题】:How can I bloat a numpy matrix?如何使 numpy 矩阵膨胀?
【发布时间】:2020-02-07 22:46:53
【问题描述】:

给定一个输入矩阵,是否有没有 for 循环的解决方案将其膨胀到一个新的输出矩阵中,这样每个入口元素之间就有 d 值为 0 的元素?

例子:

输入:

A=[[a11,a12,a13]
   [a21,a22,a23]
   [a31,a32,a33]]
d=2

期望的输出:

B=[[a11, 0, 0,a12, 0, 0,a13]
   [  0, 0, 0,  0, 0, 0,  0]
   [  0, 0, 0,  0, 0, 0,  0]
   [a21, 0, 0,a22, 0, 0,a23]
   [  0, 0, 0,  0, 0, 0,  0]
   [  0, 0, 0,  0, 0, 0,  0]
   [a31, 0, 0,a32, 0, 0,a33]]

我的方法是在形状中使用numpy.zeros(),并通过 2 个循环将元素放置在它们的位置上。 (嗯,实际上是 3,因为我是为 3 维数组做的。)

【问题讨论】:

    标签: python python-3.x numpy matrix


    【解决方案1】:

    以下应该做到这一点:

    import numpy as np
    
    d = 3
    a = np.array(
        [[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]]
    )
    
    b = np.zeros(np.array(a.shape) * (d + 1) - d)
    b[::(d + 1), ::(d + 1)] = a  # or in general (thanks to @MadPhysicist in the comments) `b[(slice(0, None, d + 1),) * b.ndim] = a`
    

    对于第三个维度,你可以只做b[::(d + 1), ::(d + 1), ::(d + 1)] = a

    【讨论】:

    • 如果你想要一些真正神奇的东西:b[(slice(0, None, d + 1),) * b.ndim] = a.
    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多