首页 > 解决方案 > 逐元素运算实际上执行矩阵运算

问题描述

假设您有两个(或更多)numpy ndarrays相等size(意味着它们具有相等数量的元素),例如:

A = np.array([[1],[2],[3]]) #Define a 3-element column vector
B = np.array([1,2,3]) #Define a 3-element row vector

鉴于 numpy 的文档将*and/运算符宣传为两种类型之间的“元素方式”,ndarray为什么要执行以下操作:

AtimesB = A*B
AoverB = A/B

返回:

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]]) #AtimesB
array([[1.        , 0.5       , 0.33333333],
       [2.        , 1.        , 0.66666667],
       [3.        , 1.5       , 1.        ]]) #AoverB

代替:

array([1,4,9])
array([1,1,1])

据我所知,该@运算符旨在进行矩阵乘法并np.divide处理矩阵除法。我在这里想念什么?这是numpy处理数组歧义的方式shapes吗?

标签: pythonarraysnumpy

解决方案


A也必须是一行才能获得您期望的结果!

>>> A
array([[1],
       [2],
       [3]])
>>> A.T
array([[1, 2, 3]])
>>> A.T * B
array([[1, 4, 9]])
>>> A.T / B
array([[1., 1., 1.]])

推荐阅读