如何在numpy中“扩充”数组?

3

我有一个数组,例如:

01
23

我希望你能够“扩展”它,使得生成的数组看起来像这样:
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
2 2 2 3 3 3
2 2 2 3 3 3
2 2 2 3 3 3

我已经尝试使用numpy的tile和各种重复和轴,但都无法完全达到我的要求。虽然我可以看出如何通过嵌套循环来实现,但我正在寻找一种“Pythonic”的方法来完成这个任务。有人知道吗?顺便说一句,我正在解决的真正问题涉及一个3D数组。


对于一个3D问题,考虑添加一个样例。如果重复的目标在这种情况下翻译不好,可以重新打开它。 - Divakar
1
@Divakar Bah。我在寻找重复内容之前就回答了。我很少在numpy标签下回答问题,所以当我知道答案时我抓住了机会。 - rayryeng
1个回答

6
考虑使用 numpy.kron 函数 - 计算两个矩阵的 Kronecker 乘积。第一个矩阵是原始矩阵,而第二个矩阵只需是一个 3 x 3 的 np.ones 数组:
In [3]: import numpy as np

In [4]: A = np.array([[0, 1], [2, 3]])

In [5]: B = np.kron(A, np.ones((3, 3), dtype=A.dtype))

In [6]: B
Out[6]:
array([[ 0.,  0.,  0.,  1.,  1.,  1.],
       [ 0.,  0.,  0.,  1.,  1.,  1.],
       [ 0.,  0.,  0.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  3.,  3.,  3.],
       [ 2.,  2.,  2.,  3.,  3.,  3.],
       [ 2.,  2.,  2.,  3.,  3.,  3.]])

请注意,我正在确保输出矩阵B符合创建A时使用的原始数据类型。我不确定您的原始矩阵类型是什么,因此我已经设置了与原始类型相同的ones矩阵,以确保B也符合相同的类型。
通常,要创建每个输入矩阵元素的N x N重复平铺,请将np.ones调用中的3更改为N

在dup one中建议有更好的方法。为了保持相同的dtype,可以使用np.ones((3, 3),dtype=A.dtype) - Divakar
@Divakar 那是个好主意。我假设输入是 numpy.float。我会修改我的帖子。然而,这个重复问题只有两个答案——其中一个用了 kron。我对第二个答案并不特别欣赏……尽管时间非常吸引人! - rayryeng
@Divakar 我会选择这个链接作为更好的重复问题:https://dev59.com/dlwY5IYBdhLWcg3wPVtS#32848377 - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接