首页 > 解决方案 > 矩阵相乘时的 Array{Float64,2} 问题 Julia

问题描述

我用矩阵做了一些相当简单的事情:

for i in 1:N
  X=XT[1:2,i]
  A[i]=X'*Sig*X+b
end

其中 XT 是我从 Matlab 导入的一个数组 (1×5 Array{Any,2}),通过这样做我得到了 Array{Float64,2} 类型的 X。而 Sig 是一个 2x2 矩阵,也是 Array{Float64,2}。

问题是:X' Sig X 的结果是 Array{Float64,2} 类型,尽管只有一个元素。我无法将其与 b 相加。

我知道我可以放一个点并求和,但如果我这样做,我仍然会有这个数组类型,并将其存储在另一个数组中,这可能会很混乱。

有什么想法可以解决它保持简单吗?

标签: arraystypescastingjulia

解决方案


Julia 明确区分元素和元素数组。其他一些对类型不太明确的语言(如 R 和 Matlab)将单元素矩阵视为一个数字,用户习惯于隐式地这样做。然而,在 Julia 中,这两件事是根本不同的——一个是数字的容器,另一个是数字。

所以答案很简单,做(X'*Sig)[1]或者first(X'*Sig)拿出元素。在即将到来的 Julia 版本中,您应该能够only(X'*Sig)明确地为只有一个元素的容器执行操作。

它简单明了,与 Matlab 或 R 不同。实际上,“简单”在语言中的含义存在根本的哲学差异。在 R 或 Matlab 中,我会说“简单”的意思是“没有太多的操作/字符”。在 Julia 中,“简单”的意思是“清晰、明确、直截了当的推理”。这只是一种不同的哲学,需要一些时间来适应。


推荐阅读