numpy 如何将数组乘以第二个数组的每个元素并将它们连接起来?

d5vmydt9  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(102)

我的矩阵:

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])

c为:

np.array([[5, 10, 6, 12], [15, 20, 18, 24]])

a乘以b,然后将它们连接起来。如何在没有双循环的情况下有效地做到这一点?

5anewei6

5anewei61#

你要找的是Kronecker product。在Numpy中,您可以通过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]]

hts6caw3

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((a[..., None] * b), 1, 2).reshape(2, -1)
array([[ 5, 10,  6, 12],
       [15, 20, 18, 24]])

相关问题