【发布时间】:2016-10-31 18:21:25
【问题描述】:
我知道我可以使用 .dot 语法使用 numpy 数组进行矩阵乘法。常规的 * 乘法是逐元素乘法。
a = np.array([[1,2],[3,4]])
print 'matrix multiplication', a.dot(a)
print 'element-wise multiplication', a * a
> matrix multiplication [[ 7 10] [15 22]]
> element-wise multiplication [[ 1 4] [ 9 16]]
这很好用,但它与我学过的所有矩阵运算相反(即“点积”通常是逐元素的,而常规积通常是全矩阵乘法。)
所以我正在调查np.matrix。好消息是矩阵乘法使用* 运算符,但我要了解如何进行逐元素乘法。
m = np.matrix(a)
print 'matrix multiplication', m * m
print 'more matrix multiplication? ', m.dot(m)
> matrix multiplication [[ 7 10] [15 22]]
> more matrix multiplication? [[ 7 10] [15 22]]
我了解发生了什么 - numpy 矩阵没有 .dot 运算符,因此它属于基本 np.array 实现。但这是否意味着无法使用np.matrix 计算点积?
这只是避免np.matrix 而坚持使用np.array 的另一个论据吗?
【问题讨论】:
-
请注意,python 3.5 引入了
a @ b运算符用于矩阵乘法,如果键入a.dot(b)让您感到沮丧。 -
.dot是张量点积。至于 '"dot product" 通常是 element-wise' - 你能找到你分配给“dot product”的含义的参考吗?您是否将 matlab 的.*视为“点积”? -
@Kirk 要回答您对该评论的问题:不,不要使用矩阵。使用数组。请参阅this 问题。
-
@Eric no - 除了我对学校矩阵代数的记忆之外,没有其他参考资料。我会修改问题。
标签: python arrays numpy matrix