从 numpy 中的一维数组创建方形 nxn 矩阵的最快方法
Fastest way to create a square nxn matrix from 1d array in numpy
假设有以下 numpy 数组:
arr = np.array([0, 1, 2, 3, 4]) # can be any array
我想知道生成以下操作的最快方法:
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]])
(1) 如何有效地创建矩阵“结果”(因为 n >> 0 可以非常大)?
(2) 这个矩阵有特定的名称吗?
这个有点快:
result = arr-arr[:,None]
粗略的基准测试,没有科学依据。 (使用 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)
假设有以下 numpy 数组:
arr = np.array([0, 1, 2, 3, 4]) # can be any array
我想知道生成以下操作的最快方法:
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]])
(1) 如何有效地创建矩阵“结果”(因为 n >> 0 可以非常大)?
(2) 这个矩阵有特定的名称吗?
这个有点快:
result = arr-arr[:,None]
粗略的基准测试,没有科学依据。 (使用 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)