Python 将列向量和行向量相乘(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+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), 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)