簡體   English   中英

在 Numpy 中將列向量和行向量相乘

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

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