我需要将每一行与相应行索引处的一列相乘。考虑下面的图形,其中我有一个3 x 3矩阵。所需的操作是将矩阵的row[0]乘以transposed_matrix的col[0],矩阵的row[1]乘以transposed_matrix的col[1],等等。
3 x 3
row[0]
transposed_matrix
col[0]
row[1]
col[1]
问题:如何在cupPy/NumpyPython中以智能方式实现(即不使用for循环)?
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是不同的矩阵,则用途:
sum(1*1 + 2*2 + 3*3)
out = (A*B.T).sum(axis=1)
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])
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)])
3条答案
按热度按时间mepcadol1#
看起来你想要:
范例:
因为您希望每行都有
sum(1*1 + 2*2 + 3*3)
的等效值。如果A和B是不同的矩阵,则用途:
uqzxnwby2#
如果您有一个3X3阵列:
您可以:
但是,它将产生3X3输出
所以,如果你想要你想要的输出:
当矩阵不同时:
aydmsdu93#
这个有用吗?它使用第一个列表将其行与第二个列表的列相乘。
它转置了第二个列表,这样我们就可以将两个数组相乘。
对于row-vector,你可以像这样使用列表解析: