我希望将两个向量相乘,一列(即(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))
我注意到在没有它的情况下我添加了asarray行Numpy似乎将xx和n视为列表。 np.shape(n)
,np.shape(xx)
,np.shape(na)
和np.shape(xxa)
会得到相同的结果:(100001L,)
答案 0 :(得分:13)
np.multiply
只能逐元素进行。你想要一个外在的产品。使用np.outer
:
np.outer(np.arccos(xxa), nd)
答案 1 :(得分:0)
如果你想使用类似于MATLAB的numpy,你必须确保你的阵列具有正确的形状。您可以使用arrayname.shape
检查任何numpy数组的形状,因为数组na
的形状为(4,)
而不是(4,1)
,transpose
方法无效且{ {1}}计算点积。使用multiply
resp。 arrayname.reshape(N+1,1)
转换你的数组。
arrayname.reshape(1,N+1)
从Python 3.5开始,您可以使用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))
运算符进行矩阵乘法。所以这是一个简单易懂的代码,与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)
表示n的转置。