[英]Writing a Transpose a vector in python
我必須寫一個 python function 我需要計算向量 For A is n by n and xn is n by 1
r_n = Axn - (xn^TAxn)xn
我正在使用 numpy,但是 T 不適用於矢量,而當我只是這樣做時
r_n = A@xn - (xn@A@xn)@xn
但xn@A@xn
給了我一個定標器。
我試過用 xn 更改 A 但似乎沒有任何效果。
像這樣制作一個 3x1 numpy 數組......
import numpy as np
a = np.array([1, 2, 3])
...然后嘗試像這樣進行轉置...
a_transpose = a.T
......令人困惑的是,會返回這個:
# [1 2 3]
如果你想定義一個(列)向量,你可以對其進行有意義的轉置,並得到一個行向量作為回報,你需要像這樣定義它:
a = np.reshape(np.array([1, 2, 3]), (3, 1))
print(a)
# [[1]
# [2]
# [3]]
a_transpose = a.T
print(a_transpose)
# [[1 2 3]]
如果你想定義一個1 xn
數組,你可以對其進行轉置以獲得nx 1
數組,你可以這樣做:
a = np.array([[1, 2, 3]])
然后通過調用aT
獲得它的轉置。
如果A
是 (n,n) 並且xn
是 (n,1):
A@xn - (xn@A@xn)@xn
(n,n)@(n,1) - ((n,1)@(n,n)@(n,1)) @ (n,1)
(n,1) error (1 does not match n)
如果xn@A@xn
給出標量,那是因為xn
是 (n,) 形狀; 根據np.matmul
文檔,這是一個帶有兩個 1d arrays 的 2d
(n,)@(n,n)@(n,) => (n,)@(n,) -> scalar
我想你想要
(1,n) @ (n,n) @ (n,1) => (1,1)
想一想 (1,1) 數組應該是與標量相同的單個值。
樣本計算; 第一個 (n,) 形狀:
In [6]: A = np.arange(1,10).reshape(3,3); x = np.arange(1,4)
In [7]: A@x
Out[7]: array([14, 32, 50]) # (3,3)@(3,)=>(3,)
In [8]: x@A@x # scalar
Out[8]: 228
In [9]: (x@A@x)@x
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[9], line 1
----> 1 (x@A@x)@x
ValueError: matmul: Input operand 0 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)
matmul
不喜歡使用標量。 但是我們可以改用np.dot
,或者簡單地相乘:
In [10]: (x@A@x)*x
Out[10]: array([228, 456, 684]) # (3,)
In [11]: A@x - (x@A@x)*x
Out[11]: array([-214, -424, -634])
將數組更改為 (3,1):
In [12]: xn = x[:,None]; xn.shape
Out[12]: (3, 1)
In [13]: A@xn - (xn.T@A@xn)*xn
Out[13]:
array([[-214],
[-424],
[-634]]) # same numbers but in (3,1) shape
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.