[英]Vectorization of matrix creation by difference of vectors (e.g. for numpy)
我經常需要根據給定的向量v[i]
通過以下方式計算矩陣A[i,j]
:
A[i, j] = v[j] - v[i]
這在嵌套循環中很簡單,但我想對其進行矢量化。 到目前為止,我只提出了另外創建兩個矩陣的相當丑陋的解決方案,其中 v 在每一行/列中重復,因此我可以使用簡單的逐元素矩陣加法。
這是一個 numpy 示例:
import numpy as np
length = 10
v = np.random.random(length)
vjMatrix = np.broadcast_to(v, (length, length))
viMatrix = np.transpose(vjMatrix)
A = vjMatrix - viMatrix
print(A)
但是,我希望有一個更優雅的解決方案,我只是看不到。 我瀏覽了很多線程,但沒有找到特別合適的東西。
謝謝!
如果我正確理解您的問題,您目前填寫數組A
如下:
import numpy as np
length = 100
np.random.seed(123)
v = np.random.rand(length)
vjMatrix = np.broadcast_to(v, (length, length))
viMatrix = np.transpose(vjMatrix)
A = vjMatrix - viMatrix
如果這是您想要的,您可以通過廣播向量v
來替換循環和顯式創建v
矩陣:
A_new = v - v[:, None]
print(np.all(A == A_new))
# Out: True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.