Python 将列向量和行向量相乘(Numpy)
我想乘以两个向量,一列(即,(N+1)x1),一行(即1x(N+1))得到一个(N+1)x(N+1)矩阵。我对Numpy相当陌生,但对MATLAB有一些经验,这是MATLAB中与我在Numpy中想要的等效代码:Python 将列向量和行向量相乘(Numpy),python,matlab,numpy,Python,Matlab,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'); 在努比,我尝试过: import numpy as np n = range(0,N+1) pi = np.pi xx = np.cos(np.multiply(pi / float
n = 0:N;
xx = cos(pi*n/N)';
T = cos(acos(xx)*n');
在努比,我尝试过:
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))
我添加了asarray行,因为我注意到如果没有它,Numpy似乎将xx和n视为列表np.shape(n)
,np.shape(xx)
,np.shape(na)
和np.shape(xxa)
给出了相同的结果:(100001L,)
只进行元素对元素的乘法。你想要一个外部产品。使用:
如果想使用类似于MATLAB的NumPy,必须确保数组的形状正确。您可以使用
arrayname.shape
检查任何NumPy数组的形状,并且由于数组na
具有形状(4,)
而不是(4,1)
,因此转置
方法是无效的,乘法
计算点积。使用arrayname。重新塑造(N+1,1)
resp<代码>阵列名称。重塑(1,N+1)以变换阵列:
将numpy导入为np
n=范围(0,n+1)
pi=np.pi
xx=np.cos(np.multiply(pi/float(N,N))
xxa=np.asarray(xx).重塑(N+1,1)
na=np.asarray(n).重塑(n+1,1)
nd=np.转置(na)
T=np.cos(np.multiply(np.arccos(xxa),nd))
自Python 3.5以来,您可以使用@
运算符进行矩阵乘法。因此,这是一个演练,以获得非常类似于MATLAB的代码:
将numpy导入为np
n=np.arange(n+1)。重塑(n+1,1)
xx=np.cos(np.pi*n/n)
T=np.cos(np.arccos(xx)@n.T)
这里n.T
表示n的转置
np.outer(np.arccos(xxa), nd)