为什么Julia在运行以下代码时会抛出错误?
毕竟,A[1,:,:]
在逻辑上是一个二维数组。
如果我没记错的话,类似的代码可以在MATLAB中使用。
julia> A = reshape(1:8, 2, 2, 2)
2x2x2 Array{Int64,3}:
[:, :, 1] =
1 3
2 4
[:, :, 2] =
5 7
6 8
julia> B = reshape(1:4, 2, 2)
2x2 Array{Int64,2}:
1 3
2 4
julia> B + A[1,:,:]
ERROR: dimensions must match
in promote_shape at operators.jl:211
in promote_shape at operators.jl:207
in + at array.jl:723
答案 0 :(得分:1)
使用问题中定义的A
和B
,请注意:
ndims(B)
ndims(A[1,:,:])
分别返回2
和3
。因此,总和操作失败,因为B
是矩阵而A[1,:,:]
是三维数组。具体而言,A[1,:,:]
为1x2x2
。解决方案是squeeze
第一个维度,如下所示:
B + squeeze(A[1,:,:], 1)
我可以在这看到混乱的根源。我猜你注意到了:
B[1, :]
返回类型Vector
,并且您假设自动压缩的相同原理适用于更高维数组。 github发布页面,其中围绕此类行为的问题已解决here。有趣的阅读。