簡體   English   中英

如何在numpy中構造向量的所有可能差異的矩陣

[英]How to construct a matrix of all possible differences of a vector in numpy

我有一個一維數組,可以說:

import numpy as np
inp_vec = np.array([1, 2, 3])

現在,我想構造一個形式的矩陣

[[1 - 1, 1 - 2, 1 - 3],
 [2 - 1, 2 - 2, 2 - 3],
 [3 - 1, 3 - 2, 3 - 3]])

當然,它可以用 for 循環來完成,但有沒有更優雅的方法來做到這一點?

這我也找到了一個很好的方法:

np.subtract.outer([1,2,3], [1,2,3])

這似乎有效:

In [1]: %paste
import numpy as np
inp_vec = np.array([1, 2, 3])

## -- End pasted text --

In [2]: inp_vec.reshape(-1, 1) - inp_vec
Out[2]: 
array([[ 0, -1, -2],
       [ 1,  0, -1],
       [ 2,  1,  0]])

解釋:

您首先將數組重塑為nx1 當您減去一維數組時,它們都會廣播到nxn

array([[ 1,  1,  1],
       [ 2,  2,  2],
       [ 3,  3,  3]])

array([[ 1,  2,  3],
       [ 1,  2,  3],
       [ 1,  2,  3]])

然后按元素進行減法,從而產生所需的結果。

import numpy as np
inp_vec = np.array([1, 2, 3])

a, b = np.meshgrid(inp_vec, inp_vec)
print(b - a)

輸出:

Array([[ 0 -1 -2],
       [ 1  0 -1],
       [ 2  1  0]])

使用 np.nexaxis

import numpy as np
inp_vec = np.array([1, 2, 3])

output = inp_vec[:, np.newaxis] - inp_vec

輸出

array([[ 0, -1, -2],
       [ 1,  0, -1],
       [ 2,  1,  0]])

這是一種快速而簡單的替代方法。

import numpy as np
inp_vec = np.array([1, 2, 3])

N = len(inp_vec)
np.reshape(inp_vec,(N,1)) - np.reshape(inp_vec,(1,N))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM