如何在Python中将行与相应的列相乘(cuPy/Numpy)?

sc4hvdpw  于 12个月前  发布在  Python
关注(0)|答案(3)|浏览(90)

我需要将每一行与相应行索引处的一列相乘。考虑下面的图形,其中我有一个3 x 3矩阵。所需的操作是将矩阵的row[0]乘以transposed_matrixcol[0],矩阵的row[1]乘以transposed_matrixcol[1],等等。

问题:如何在cupPy/NumpyPython中以智能方式实现(即不使用for循环)?

mepcadol

mepcadol1#

看起来你想要:

out = (A**2).sum(axis=1)

范例:

# input
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

# output
array([ 14,  77, 194])

因为您希望每行都有sum(1*1 + 2*2 + 3*3)的等效值。
如果A和B是不同的矩阵,则用途:

out = (A*B.T).sum(axis=1)
uqzxnwby

uqzxnwby2#

如果您有一个3X3阵列:

import numpy as np
A = np.array([[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]])

您可以:

[email protected]

但是,它将产生3X3输出

array([[ 14,  32,  50],
       [ 32,  77, 122],
       [ 50, 122, 194]])

所以,如果你想要你想要的输出:

np.diag([email protected])

#array([ 14,  77, 194])

当矩阵不同时:

B = np.array([
    [4,3,2],
    [6,9,7],
    [8,4,3]
])

np.diag([email protected])

#output
array([ 16, 111, 115])
aydmsdu9

aydmsdu93#

这个有用吗?它使用第一个列表将其行与第二个列表的列相乘。
它转置了第二个列表,这样我们就可以将两个数组相乘。

import numpy as np

first = [
    [2,3,5],
    [4,6,7],
    [9,7,5]
]
second = [
    [4,3,2],
    [6,9,7],
    [8,4,3]
]

first = np.array(first)
second = np.array(second)

print(first* second.T)

对于row-vector,你可以像这样使用列表解析:

print([sum(row) for row in (first * second.T)])

相关问题