[英]Multiplying column and row vectors in Numpy
我想將兩個向量、一列(即 (N+1)x1)、一行(即 1x(N+1))相乘得到一個 (N+1)x(N+1) 矩陣。 我對 Numpy 相當陌生,但對 MATLAB 有一些經驗,這是 MATLAB 中與我在 Numpy 中想要的等效代碼:
n = 0:N;
xx = cos(pi*n/N)';
T = cos(acos(xx)*n');
在 Numpy 我試過:
import numpy as np
n = range(0,N+1)
pi = np.pi
xx = np.cos(np.multiply(pi / float(N), n))
xxa = np.asarray(xx)
na = np.asarray(n)
nd = np.transpose(na)
T = np.cos(np.multiply(np.arccos(xxa),nd))
在我注意到沒有它 Numpy 似乎將 xx 和 n 視為列表后,我添加了 asarray 行。 np.shape(n)
, np.shape(xx)
, np.shape(na)
和np.shape(xxa)
給出相同的結果: (100001L,)
np.multiply
只做逐個元素的乘法。 你想要一個外部產品。 使用np.outer
:
np.outer(np.arccos(xxa), nd)
如果您想使用類似於 MATLAB 的 NumPy,您必須確保您的數組具有正確的形狀。 您可以使用arrayname.shape
檢查任何 NumPy 數組的形狀,並且因為您的數組na
具有形狀(4,)
而不是(4,1)
, transpose
方法無效, multiply
計算點積。 使用arrayname.reshape(N+1,1)
響應。 arrayname.reshape(1,N+1)
來轉換你的數組:
import numpy as np
n = range(0,N+1)
pi = np.pi
xx = np.cos(np.multiply(pi / float(N), n))
xxa = np.asarray(xx).reshape(N+1,1)
na = np.asarray(n).reshape(N+1,1)
nd = np.transpose(na)
T = np.cos(np.multiply(np.arccos(xxa),nd))
從 Python 3.5 開始,您可以使用@
運算符進行矩陣乘法。 因此,獲得與 MATLAB 非常相似的代碼是一個簡單的過程:
import numpy as np
n = np.arange(N + 1).reshape(N + 1, 1)
xx = np.cos(np.pi * n / N)
T = np.cos(np.arccos(xx) @ n.T)
這里nT
表示 n 的轉置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.