Arrays 矩阵相乘时的数组{Float64,2}问题

Arrays 矩阵相乘时的数组{Float64,2}问题,arrays,types,casting,julia,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数组{Any,2}),通过这样做,我得到了数组{Float64,2}类型的X。Sig是一个2x2矩阵,也是数组{Float64,2} 问题是:X'SigX的结果是数组{Float64,2}类型,尽管只有一个元素。我不能把它和b相加 我知道我可以放一个点,然后求和,但是如果我这样做,我仍然会有这个数组类型,并将它存储在

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

for i in 1:N
  X=XT[1:2,i]
  A[i]=X'*Sig*X+b
end
其中XT是我从Matlab导入的数组数组(1×5数组{Any,2}),通过这样做,我得到了数组{Float64,2}类型的X。Sig是一个2x2矩阵,也是数组{Float64,2}

问题是:X'SigX的结果是数组{Float64,2}类型,尽管只有一个元素。我不能把它和b相加

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


有什么办法可以解决这个问题保持简单

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

因此答案很简单,只需执行
(X'*Sig)[1]
首先(X'*Sig)
即可取出元素。在Julia即将发布的版本中,您应该能够对只有一个元素的容器显式地执行
only(X'*Sig)


它简单明了,与Matlab或R不同。实际上,语言中“简单”的含义有着根本的哲学区别。在R或Matlab中,我会说“简单”意味着“没有太多的运算/字符”。在朱莉娅的小说中,“简单”的意思是“清晰、明确、直截了当的推理”。这只是一种不同的哲学,需要一些时间来适应

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

因此答案很简单,只需执行
(X'*Sig)[1]
首先(X'*Sig)
即可取出元素。在Julia即将发布的版本中,您应该能够对只有一个元素的容器显式地执行
only(X'*Sig)


它简单明了,与Matlab或R不同。实际上,语言中“简单”的含义有着根本的哲学区别。在R或Matlab中,我会说“简单”意味着“没有太多的运算/字符”。在朱莉娅的小说中,“简单”的意思是“清晰、明确、直截了当的推理”。这只是一种不同的哲学,需要一些时间来适应

A的尺寸是多少?它也是数组{Float64,2}吗?它的大小是多少?您希望和的结果是存储在A中的数组还是只存储在[i]中的标量?这是奇数
XT[1:2,i]
应该是向量,而不是矩阵。很奇怪,我想把它存储为Float64。A也应该是数组{Float64,2}。请编辑您的问题,以包括数组A和XT的初始化?这很重要,我已经编辑过了。碰巧,我的数组XT不是正规矩阵。问题就在这里。看起来我可以做XT[I][:]得到正确的维数,但我不知道为什么它不会以另一种方式发生。A的维数是多少?它也是数组{Float64,2}吗?它的大小是多少?您希望和的结果是存储在A中的数组还是只存储在[i]中的标量?这是奇数
XT[1:2,i]
应该是向量,而不是矩阵。很奇怪,我想把它存储为Float64。A也应该是数组{Float64,2}。请编辑您的问题,以包括数组A和XT的初始化?这很重要,我已经编辑过了。碰巧,我的数组XT不是正规矩阵。问题就在这里。似乎我可以做XT[I][:]并得到正确的维数,但我不知道为什么它不会以另一种方式发生。这是我的第一个答案,但OP的代码中实际上还有另一个错误:
X=XT[1:2,I]
给出了
XT
中的前两个元素(前两个数组)(a
1D
数组)当
i
为1时,否则为错误。第一行没有为此目的适当索引
XT
。还有
A[]
来访问唯一的元素。
MAT.jl
将MATLAB的行或列向量读取为Julia的2D矩阵。如果使用
vec
等将
X
作为
向量
,则可以避免OP的
1x1
矩阵问题
v'*M*v
自动使用
LinearAlgebra.dot
给出标量而不是数组,并以一种高效的方式避免矩阵乘法。这要归功于Andreas Peter,他今天在Julia Slack的“帮助台”频道上解释了这个解决方案。视角不错。这是我第一次找到答案,但OP的代码中实际上还有另一个错误:
X=XT[1:2,i]
给出了
XT
中的前两个元素(前两个数组)(a
1D
数组)当
i
为1时,否则为错误。第一行没有为此目的对
XT
进行适当索引。还有
a[]
访问唯一元素。
MAT.jl
读取MATLAB的行或列向量作为Julia的2D矩阵。如果将
X
作为
向量
,例如,
vec
v'*M*v
自动使用
linearagebra.dot
给出标量ra,则可以避免OP的
1x1
矩阵问题这要归功于Andreas Peter,他今天在Julia Slack的帮助台频道上解释了这个解决方案。视角不错。