在Numpy中乘以列和行向量

时间:2015-03-20 09:19:24

标签: 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');
在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,)

2 个答案:

答案 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的转置。