我不认为这些都在做同样的事情。 numpy
表达式只是逐个元素地进行乘法运算,而Julia表达式则是真正的矩阵乘法运算。
您可以通过使用较小的输入来查看差异。下面是numpy
例如:
>>> A
array([1, 2, 3])
>>> B
array([[1],
[2],
[3]])
>>> A * B
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
>>> B * A
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
请注意,在这里我们有广播,其中“模拟”两个向量的外积,所以你可能会认为这是矩阵乘法。但它不可能,因为矩阵乘法不可交换,并在这里(A * B) == (B * A)
。你看,当你在朱莉娅做同样的事情会发生什么:
julia> A = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> B = [1 2 3]
1x3 Array{Int64,2}:
1 2 3
julia> A * B
3x3 Array{Int64,2}:
1 2 3
2 4 6
3 6 9
julia> B * A
1-element Array{Int64,1}:
14
在这里,B * A
给你一个合适的点积。如果您想要真正的比较,请尝试numpy.dot
。
如果您使用Python 3.5或更高版本,还可以使用新的内置点积算子!只要确保矩阵的形状是对齐的:
>>> A
array([[1, 2, 3]])
>>> B
array([[1],
[2],
[3]])
>>> A @ B
array([[14]])
>>> B @ A
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
谢谢您为我启发Senderle。 numpy中的以下代码所需时间比Julia版本更长: A = np.mat(np.random.rand(10000,10000)); B = np.mat(np.random.rand(10000,10000)); C = A * B –
哦,是的,非常好的一点! (脸红) –