【问题标题】:How to "inflate" an array in numpy? [duplicate]如何在numpy中“膨胀”一个数组? [复制]
【发布时间】:2017-09-01 15:51:02
【问题描述】:

我有一个数组,例如

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 问题,请考虑添加示例。如果 dup 目标在这种情况下翻译得不好,它可以重新打开。
  • @Divakar Bah。我在寻找副本之前回答了。我不经常在 numpy 标签中回答,所以当我知道答案时我就抓住了这个机会。

标签: python arrays numpy


【解决方案1】:

考虑使用numpy.kron - 两个矩阵的克罗内克积。第一个矩阵将是您拥有的原始矩阵,第二个矩阵只是一个 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 矩阵以尊重与 A 相同的类型以确保B 也符合相同的类型。

一般来说,要为输入矩阵中的每个元素创建一个N x N 重复图块,请将np.ones 调用中的3 更改为N

【讨论】:

  • 在 dup one 中建议有更好的方法。为了这个保持相同的数据类型:np.ones((3, 3),dtype=A.dtype).
  • @Divakar 这是个好主意。我假设输入是numpy.float。我会改变我的帖子。但是,副本只有两个答案 - 其中一个是 kron。我不是特别喜欢第二个答案……虽然时机很吸引人!
  • @Divakar 我会使用此链接作为更好的副本:stackoverflow.com/questions/32846846/…
猜你喜欢
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多