在python中获得两个一维数组的乘积

时间:2014-03-28 10:05:04

标签: 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 [4][5][6][7]
[1]
[2]
[3]

3 个答案:

答案 0 :(得分:5)

科学python中的外部产品np.outer(x,y)

请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.outer.html

import numpy;
>>> x=numpy.array([1,2,3])
>>> y=numpy.array([4,5,6,7])
>>> numpy.outer(x,y)
array([[ 4,  5,  6,  7],
       [ 8, 10, 12, 14],
       [12, 15, 18, 21]])

答案 1 :(得分:3)

在MATLAB中,size(x)(1,3)。因此x'(3,1)。将y乘以(1,4),会产生(3,4)形状。

numpy中,x.shape(3,)x.T是一样的。因此,要获得相同的外部产品,您需要扩展xy的维度。一种方法是使用reshape

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)

它基于物理学中流行的索引符号,在编写更复杂的内部(点)产品时特别有用。

答案 2 :(得分:0)

使用列表理解:

x = [1, 2, 3]
y = [4, 5, 6, 7]
z = [[i * j for j in y] for i in x]