给定一个 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 实现这一点。谁能建议一个更清洁的解决方案?
想象一下您重复
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]])
我认为有一种更快/更好的方法来做到这一点,但我首先看到了这种方法。