创建由依赖于索引的二维数组组成的4-D numpy数组

时间:2019-07-24 01:32:45

标签: python numpy

我有一个二维nx2数组,其中n是代码运行时的变量。以n = 4为例,原始数组是

[[0, 1],
 [2, 3],
 [4, 5],
 [6, 7]]

我想创建一个4-D nxnx2x2数组,其中顶层nxn数组的每个元素是一个与索引相关的2x2数组,该数组由原始数组的第i行和第j行组成。例如,索引为[0,3]的2x2数组为

[[0, 1],
 [6, 7]]

我尝试使用np.fromfunction函数并在每个坐标处构造2x2数组。

new = np.fromfunction(lambda i,j: np.stack((old[i],old[j])), (n,n), dtype=int)

我得到的是2xnxnxn,而不是nxnx2n2数组。

当然,可以选择使用嵌套循环并迭代nxn次,但如果可能的话,我想以更快的方式进行操作。

1 个答案:

答案 0 :(得分:1)

以下是使用broadcast_arrays()stack()的示例:

import numpy as np

a = np.array(
    [[0, 1],
     [2, 3],
     [4, 5],
     [6, 7]])

b = np.stack(np.broadcast_arrays(a[:, None, :], a[None, :, :]), axis=-2)
print(b[0, 3])