在python中获取两个一维数组的乘积
Matlab中的一些非常简单的东西,但我在Python中找不到。如何获取以下信息:在python中获取两个一维数组的乘积,python,numpy,Python,Numpy,Matlab中的一些非常简单的东西,但我在Python中找不到。如何获取以下信息: x=np.array([1,2,3]) y=np.array([4,5,6,7]) z=x.T*y z= [[4,5,6,7], [8,10,12,14], [12,15,18,21]] 如 使用列表理解: x = [1, 2, 3] y = [4, 5, 6, 7] z = [[i * j for j in y] for i in x] 在科学python中,这将是一个外部产品np.outer(x,y
x=np.array([1,2,3])
y=np.array([4,5,6,7])
z=x.T*y
z=
[[4,5,6,7],
[8,10,12,14],
[12,15,18,21]]
如
使用列表理解:
x = [1, 2, 3]
y = [4, 5, 6, 7]
z = [[i * j for j in y] for i in x]
在科学python中,这将是一个外部产品
np.outer(x,y)
见:
在MATLAB中,size(x)
是(1,3)
。所以x'
是(3,1)
。将其乘以y
,即(1,4)
,生成(3,4)
形状
在numpy
中,x.shape
是(3,)
<代码>x.T是相同的。因此,要获得相同的外积,需要扩展x
和y
的维度。一种方法是使用重塑
z = x.reshape(3,1)* y.reshape(1,4)
numpy
还允许您使用newaxis
索引来执行此操作(None
也可以)。如果需要,它还会自动添加起始newaxis
。这也起到了作用:
z = x[:,np.newaxis]*y
np.outer
就是这样做的(稍加修饰):a.ravel()[:,newaxis]*b.ravel()[newaxis,:]
numpy
z = np.einsum('i,j->ij',x,y)
它基于物理学中流行的索引符号,在编写更复杂的内部(dot)产品时特别有用
z = x[:,np.newaxis]*y
z = np.einsum('i,j->ij',x,y)