Numpy 在所有元素之间做乘积,然后插入一个三角形的二维数组

Nic*_*s H 5 arrays numpy python-3.x numpy-einsum numpy-ndarray

假设我们在下面有一个一维数组

arr = np.array([a,b,c])
Run Code Online (Sandbox Code Playgroud)

我需要做的第一件事是制作所有元素的产品,即

[ab,ac,bc]
Run Code Online (Sandbox Code Playgroud)

然后用这个元素构造一个二维三角形数组

[
[a,ab,ac],
[0,b,bc],
[0,0,c]
]

Run Code Online (Sandbox Code Playgroud)

Ehs*_*san 5

用你的一维数组创建一个对角线,并用 的上三角形填充它的上三角形outer

out = np.diag(arr)
#upper triangle indices
uidx = np.triu_indices(arr.size,k=1)
#replacing upper triangle with outer
out[uidx]=np.outer(arr,arr)[uidx]
Run Code Online (Sandbox Code Playgroud)