arrays - 矩阵相乘时的 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 相加。
我知道我可以放一个点并求和,但如果我这样做,我仍然会有这个数组类型,并将其存储在另一个数组中,这可能会很混乱。
有什么想法可以解决它保持简单吗?
解决方案
Julia 明确区分元素和元素数组。其他一些对类型不太明确的语言(如 R 和 Matlab)将单元素矩阵视为一个数字,用户习惯于隐式地这样做。然而,在 Julia 中,这两件事是根本不同的——一个是数字的容器,另一个是数字。
所以答案很简单,做(X'*Sig)[1]
或者first(X'*Sig)
拿出元素。在即将到来的 Julia 版本中,您应该能够only(X'*Sig)
明确地为只有一个元素的容器执行操作。
它简单明了,与 Matlab 或 R 不同。实际上,“简单”在语言中的含义存在根本的哲学差异。在 R 或 Matlab 中,我会说“简单”的意思是“没有太多的操作/字符”。在 Julia 中,“简单”的意思是“清晰、明确、直截了当的推理”。这只是一种不同的哲学,需要一些时间来适应。
推荐阅读
- json - 在 Python 3 中使用 json.dumps() 将正确格式的 JSON 写入文件
- google-cloud-platform - Speaker Diarizations vs Speaker Recognition google cloud vs microsoft azure vs ibm watson vs aws transcribe
- javascript - 刷新页面时路由不填充数据
- c++ - 挣扎于 .get()
- python - 如何控制 Pandas 中的每小时 GROUPBY 设置?
- javascript - 使用 vuejs 发送照片
- javascript - 请求我在其他地方创建的 json 文件时获取 API 错误
- asp.net-core - 如何通过 Polymer 在 Visual Studio ASP.NET Core 应用程序中使用 lit-element
- sympy - 在 sympy 中运行表达式的 AST
- docker - 在 docker 中启用 sshd 登录