【问题标题】:Expanding a matrix [duplicate]扩展矩阵[重复]
【发布时间】:2018-06-23 14:55:49
【问题描述】:

给定一个矩阵,如:

1 0 0
0 1 1
1 1 0

我想将每个元素扩展为大小为 AxA 的“子矩阵”,例如 3x3,结果将是:

1 1 1 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 0 0 0

在 Python 中使用 numpy(或 PyTorch)最快的方法是什么?

【问题讨论】:

  • 定义“最快”。还是速度快且可读性够好?
  • 我只是想知道如何避免使用两个循环,因为我有很多这样的矩阵(我有 4D 矩阵)。

标签: python numpy


【解决方案1】:

因为你描述的是Kronecker product

使用np.kron

计算克罗内克积,这是一个由第二个数组的块按第一个缩放的复合数组。

x = np.array([[1, 0, 0], [0, 1, 1], [1, 1, 0]])

np.kron(x, np.ones((3, 3)))

array([[1., 1., 1., 0., 0., 0., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 1., 1., 1., 1., 1.],
       [0., 0., 0., 1., 1., 1., 1., 1., 1.],
       [0., 0., 0., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 1., 1., 1., 0., 0., 0.]])

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多