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]
答案 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
是一样的。因此,要获得相同的外部产品,您需要扩展x
和y
的维度。一种方法是使用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]