我有一个二维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次,但如果可能的话,我想以更快的方式进行操作。
答案 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])