【问题标题】:How to initialise a block matrix with the same matrices as elements? [duplicate]如何用与元素相同的矩阵初始化块矩阵? [复制]
【发布时间】:2019-11-29 06:57:45
【问题描述】:

给定一个 2x2 矩阵 r = np.array([[1, 0], [0, 0]], dtype=complex),我如何创建一个块矩阵,以便我得到 N r 作为它的条目,以便我得到

np.array([r, r,..., r, r])

有没有像np.something(r, 5) 这样的np.array([r, r, r, r, r])

【问题讨论】:

  • 该数组的形状为(n,2,2)。那是你要的吗? r[None,:,:].repeat(n,0) 将创建一个该形状的新数组,r 在新的第一个轴上重复 n 次。
  • 是的,这正是我想要的。在所有 6 种方法中(其中 2 种和链接帖子中的 4 种),您的实际上是大 n 中最快的 :) 如果您将您的评论作为官方解决方案发布,那么我会很乐意接受它。
  • 糟糕,实际上 @Divakar 的 np.broadcast_to(r,(n,)+r.shape) 更快,如果 n 是 100000 则不会减慢速度。我仍然会接受你的回答:)))

标签: python numpy multidimensional-array


【解决方案1】:

你可以再次使用np.array 来获得你想要的东西。 一种方法如下:

import numpy as np
r = np.array([[1, 0], [0, 0]], dtype=complex)

samples = 5
a = np.array([r]*samples)
print(a.shape) # (samples, 2, 2) = (5, 2, 2)
print(a[0])    # array([[1.+0.j, 0.+0.j], [0.+0.j, 0.+0.j]])

要扩展或加快速度,您可能需要使用以下内容:

import numpy as np
n_samples = 10000
b = np.repeat(a[np.newaxis, :, :], n_samples, axis=0)

【讨论】:

  • 你的方式是我想要的,但是当你扩大规模时实际上很慢。感谢您的尝试:)
  • @DarrenNg 我已经更新了答案。我希望它可以解决您的问题。
猜你喜欢
  • 2018-11-12
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多