在Numpy中乘以列向量和行向量

2024-03-29 06:40:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想乘两个向量,一列(即(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))

当我注意到如果没有它,Numpy似乎会把xx和n作为列表来处理后,我添加了asarray行。np.shape(n)np.shape(xx)np.shape(na)np.shape(xxa)给出相同的结果:(100001L,)


Tags: 代码numpynppicos向量multiplyx1
2条回答

如果你想使用类似于MATLAB的numpy,你必须确保你的数组有正确的形状。您可以使用arrayname.shape检查任何numpy数组的形状,并且由于数组na具有形状(4,),而不是(4,1)transpose方法无效,并且multiply计算点积。使用arrayname.reshape(N+1,1)resp。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)

这里n.T表示n的转置

^{}只进行元素间的乘法运算。你想要一个外部产品。使用^{}

np.outer(np.arccos(xxa), nd)

相关问题 更多 >