矩阵乘以Julia时的Array {Float64,2}问题

时间:2019-06-03 20:53:53

标签: arrays types casting 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。

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

有什么想法可以解决这个问题呢?

1 个答案:

答案 0 :(得分:4)

Julia明确区分元素和元素数组。其他一些对类型不太明确的语言(例如R和Matlab)则将单元素矩阵视为数字,并且用户习惯于隐式地执行该操作。但是,在Julia中,这两件事根本不同-一是数字容器,另一是数字。

因此答案很简单,执行(X'*Sig)[1]first(X'*Sig)即可找出元素。在Julia的后续版本中,您应该能够仅对具有一个元素的容器进行明确的only(X'*Sig)处理。

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