在 numpy 中从 1d 数组创建 nxn 方阵的最快方法

ise*_*gar 3 python arrays numpy scipy

假设有以下 numpy 数组:

arr = np.array([0, 1, 2, 3, 4]) # can be any array
Run Code Online (Sandbox Code Playgroud)

我想知道生成以下操作的最快方法:

n = arr.shape[0]
result = np.tile(arr, (n, 1)) - arr.reshape((-1, 1))
print(result):

array([[ 0,  1,  2,  3,  4],
       [-1,  0,  1,  2,  3],
       [-2, -1,  0,  1,  2],
       [-3, -2, -1,  0,  1],
       [-4, -3, -2, -1,  0]])
Run Code Online (Sandbox Code Playgroud)

(1) 如何有效地创建矩阵“结果”(因为 n >> 0 可能非常大)?

(2) 这个矩阵有特定的名称吗?

Ala*_* T. 6

这有点快:

result = arr-arr[:,None]
Run Code Online (Sandbox Code Playgroud)

粗略的基准,没有任何科学依据。(用 arr 计时 100 次):

          5 items (arr) 100 times   10,000 items (np.arange) once
OP:       0.0006383560000000066     0.7902513520000001
This one: 0.0001735200000000381     0.3640661519999999
Kelly's:  0.00027326299999996806    0.36036748900000015 (see comments)
Run Code Online (Sandbox Code Playgroud)

  • “np.subtract.outer(-arr, -arr)”怎么样?(我使用的是手机,编写基准测试很不方便,而且我假设您已经有了一个。) (2认同)