numpy.
outer
计算两个向量的外积。
给定两个向量, a = [a0, a1, ..., aM] 和 b = [b0, b1, ..., bN] ,外部产品 [1] 是::
a = [a0, a1, ..., aM]
b = [b0, b1, ..., bN]
[[a0*b0 a0*b1 ... a0*bN ] [a1*b0 . [ ... . [aM*b0 aM*bN ]]
第一个输入向量。如果输入不是一维的,则将被展平。
第二输入向量。如果输入不是一维的,则将被展平。
存储结果的位置
1.9.0 新版功能.
out[i, j] = a[i] * b[j]
参见
inner
einsum
einsum('i,j->ij', a.ravel(), b.ravel()) 是等效的。
einsum('i,j->ij', a.ravel(), b.ravel())
ufunc.outer
除一维和其它运算以外的维数的一种推广。 np.multiply.outer(a.ravel(), b.ravel()) 是等效的。
np.multiply.outer(a.ravel(), b.ravel())
tensordot
np.tensordot(a.ravel(), b.ravel(), axes=((), ())) 是等效的。
np.tensordot(a.ravel(), b.ravel(), axes=((), ()))
工具书类
:G.H.Golub和C.F.Van Loan, 矩阵计算 ,第3版,巴尔的摩,医学博士,约翰霍普金斯大学出版社,1996年,第8页。
实例
制造一个( very 粗糙)用于计算Mandelbrot集的网格:
>>> rl = np.outer(np.ones((5,)), np.linspace(-2, 2, 5)) >>> rl array([[-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.]]) >>> im = np.outer(1j*np.linspace(2, -2, 5), np.ones((5,))) >>> im array([[0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j], [0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j], [0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], [0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j], [0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j]]) >>> grid = rl + im >>> grid array([[-2.+2.j, -1.+2.j, 0.+2.j, 1.+2.j, 2.+2.j], [-2.+1.j, -1.+1.j, 0.+1.j, 1.+1.j, 2.+1.j], [-2.+0.j, -1.+0.j, 0.+0.j, 1.+0.j, 2.+0.j], [-2.-1.j, -1.-1.j, 0.-1.j, 1.-1.j, 2.-1.j], [-2.-2.j, -1.-2.j, 0.-2.j, 1.-2.j, 2.-2.j]])
使用字母“矢量”的示例:
>>> x = np.array(['a', 'b', 'c'], dtype=object) >>> np.outer(x, [1, 2, 3]) array([['a', 'aa', 'aaa'], ['b', 'bb', 'bbb'], ['c', 'cc', 'ccc']], dtype=object)