根据一维数组的第 i 个和第 j 个元素的最小值创建一个 2D numpy 数组

问题描述 投票:0回答:1

给定一个 1D 数组,我想创建一个 2D numpy 数组,其中

arr2d[i,j]
处的元素等于
min(arr1d[i], arr1d[j])

我可以用下面的代码来实现这一点:

arr1d = np.array([5, 4, 3, 4, 2, 3])
arr2d = np.zeros((arr1d.shape[0], arr1d.shape[0]))
for i in range(arr1d.shape[0]):
    for j in range(arr1d.shape[0]):
        arr2d[i, j] = min(arr1d[i], arr1d[j])

...但我觉得应该有一种更惯用和/或更有效的方法来用 numpy 实现这一点。谁能建议一个更清洁的解决方案?

python numpy numpy-ndarray
1个回答
0
投票

想象一下您重复

arr1d
来制作一个方形数组。然后,
arr2d
是该方阵及其转置的元素最小值(因为它将比较
i
j
)。

a1 = np.repeat(arr1d[None,:], arr1d.shape[0], axis=0)
a2 = a1.T
arr2d = np.minimum(a1, a2)  # elementwise minimum

这是

a1
的样子:

array([[5, 4, 3, 4, 2, 3],
       [5, 4, 3, 4, 2, 3],
       [5, 4, 3, 4, 2, 3],
       [5, 4, 3, 4, 2, 3],
       [5, 4, 3, 4, 2, 3],
       [5, 4, 3, 4, 2, 3]])

我认为有一种更快/更好的方法来做到这一点,但我首先看到了这种方法。

© www.soinside.com 2019 - 2024. All rights reserved.