arrays - 如何在 Julia 中乘以多维数组/矩阵

标签 arrays matrix julia matrix-multiplication

将两个多维数组相乘,例如,一个 1 维数组与一个 3 维数组:

[1 2] * reshape(1:8,2,2,2)

给我错误信息:

LoadError: MethodError: `*` has no method matching *(::Array{Int64,2}, ::Array{Int64,3})
Closest candidates are:
  *(::Any, ::Any, !Matched::Any, !Matched::Any...)
  *{TA,TB}(::Union{DenseArray{TA,1},DenseArray{TA,2},SubArray{TA,1,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD},SubArray{TA,2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}, !Matched::Base.LinAlg.AbstractTriangular{TB,S<:AbstractArray{T,2}})
  *{TA,TQ,N}(::Union{DenseArray{TA,N},SubArray{TA,N,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}, !Matched::Union{Base.LinAlg.QRCompactWYQ{TQ,M<:AbstractArray{T,2}},Base.LinAlg.QRPackedQ{TQ,S<:AbstractArray{T,2}}})
  ...
while loading In[167], in expression starting on line 1

 in Ac_mul_B at operators.jl:157

将多维矩阵代数的数学定义用于矩阵/数组的 (1 x 2) * (2 x 2 x 2) 乘法。

一个更一般的例子可以是 A*B = C 表示 sum_k A_{i,j,k} B_{k,l,m} = C_{i,j,l,m},其中 A 是 3 -索引矩阵,或者你喜欢的张量,B 是一个 3 索引矩阵,生成的 C 是一个四索引矩阵/张量,但是,一般来说,可以有任意数量的维度,并且维度可以有任意大小(在合理范围内)。查看有关 matrix product 定义的更多信息或 tensor contraction .

Julia 中这个乘法的正确语法是什么?

最佳答案

您可以使用reshape 将多维数组转换为矩阵, 将它们相乘,并将结果转换回多维数组。

A = [1 2]
B = reshape(1:8,2,2,2)
reshape( reshape(A,2,1)' * reshape(B,2,4), 2, 2 )

(在这个例子中,因为A已经是一个矩阵,所以实际上不需要reshape。)

关于arrays - 如何在 Julia 中乘以多维数组/矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685517/

相关文章:

Julia 相当于 R 的帮助页面和小插曲?

julia - 如何在 Julia 中将矩阵漂亮地打印到字符串?

arrays - 如何在换行符分隔的列表中使用 bash 的选择?

c - 为全局多维数组分配内存

c - 返回指向数组中最大数的指针的函数

python - Python 中针对简单数组查找的小循环的性能问题

android - 矩阵坐标中的点

r - 查找某行中最小元素的列号

矩阵的 R 索引用于确定 R 中超过 8 小时的最大值的索引

julia - 如何在 Julia 中为类型别名定义构造函数