我正在嘗試創建一個函式并使用 numpy 計算內積。我得到了這個函式,但是我在我的 np.reshape 函式中使用了顯式數字,我需要根據輸入來使用它。
我的代碼是這樣的:
import numpy as np
X = np.array([[1,2],[3,4]])
Z = np.array([[1,4],[2,5],[3,6]])
# Calculating S
def calculate_S(X, n, m):
assert n == X.shape[0]
n,d1=X.shape
m,d2=X.shape
S = np.diag(np.inner(X,X))
return S
S= calculate_S(X,n,m)
S = S.reshape(2,1)
print(s)
output:
---------------------------------
[[ 5]
[25]]
所以輸出是正確的,但不是指定 2,1 我需要根據我的矩陣的形狀自動放置這些值。我怎么做?
uj5u.com熱心網友回復:
In [163]: X = np.array([[1,2],[3,4]])
In [164]: np.inner(X,X)
Out[164]:
array([[ 5, 11],
[11, 25]])
In [165]: np.diag(np.inner(X,X))
Out[165]: array([ 5, 25])
reshape與-1得到周圍不必指定2:
In [166]: np.diag(np.inner(X,X)).reshape(-1,1)
Out[166]:
array([[ 5],
[25]])
另一種添加維度的方法:
In [167]: np.diag(np.inner(X,X))[:,None]
Out[167]:
array([[ 5],
[25]])
您可以直接使用以下方法獲取“對角線”:
In [175]: np.einsum('ij,ij->i',X,X)
Out[175]: array([ 5, 25])
其他
In [177]: (X[:,None,:]@X[:,:,None])[:,0,:]
Out[177]:
array([[ 5],
[25]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/348485.html
上一篇:用于基于結構的陣列的Python
下一篇:為什么不消除零()洗掉零條目?
