我的矩阵:
a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]])
c为:
c
np.array([[5, 10, 6, 12], [15, 20, 18, 24]])
将a乘以b,然后将它们连接起来。如何在没有双循环的情况下有效地做到这一点?
a
b
5anewei61#
你要找的是Kronecker product。在Numpy中,您可以通过numpy.kron()获取它:
numpy.kron()
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([5, 6]) # May also be 2D, as in the question c = np.kron(b, a) print(c) # >>> [[ 5 10 6 12] # [15 20 18 24]]
kron()中参数的顺序在这里很重要:写入kron(a, b)将在c中产生相同的值,但顺序不同,即[[5, 6, 10, 12], [15, 18, 20, 24]]。
kron()
kron(a, b)
[[5, 6, 10, 12], [15, 18, 20, 24]]
hts6caw32#
你可以使用广播和转置:
>>> a array([[1, 2], [3, 4]]) >>> b array([[5, 6]]) >>> (a[..., None] * b) array([[[ 5, 6], [10, 12]], [[15, 18], [20, 24]]])
然后用转置:
>>> (a[..., None] * b).transpose((0,2,1)) array([[[ 5, 10], [ 6, 12]], [[15, 20], [18, 24]]])
最后是一个reform:
>>> (a[..., None] * b).transpose((0,2,1)).reshape(2, -1) array([[ 5, 10, 6, 12], [15, 20, 18, 24]])
也许,使用np.swapaxes更清晰:
np.swapaxes
>>> np.swapaxes((a[..., None] * b), 1, 2).reshape(2, -1) array([[ 5, 10, 6, 12], [15, 20, 18, 24]])
2条答案
按热度按时间5anewei61#
你要找的是Kronecker product。在Numpy中,您可以通过
numpy.kron()
获取它:kron()
中参数的顺序在这里很重要:写入kron(a, b)
将在c
中产生相同的值,但顺序不同,即[[5, 6, 10, 12], [15, 18, 20, 24]]
。hts6caw32#
你可以使用广播和转置:
然后用转置:
最后是一个reform:
也许,使用
np.swapaxes
更清晰: