簡體   English   中英

通過向量的差異對矩陣創建進行向量化(例如,對於 numpy)

[英]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.

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