在Julia

时间:2015-07-15 22:28:51

标签: arrays julia

为什么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

1 个答案:

答案 0 :(得分:1)

使用问题中定义的AB,请注意:

ndims(B)
ndims(A[1,:,:])

分别返回23。因此,总和操作失败,因为B是矩阵而A[1,:,:]是三维数组。具体而言,A[1,:,:]1x2x2。解决方案是squeeze第一个维度,如下所示:

B + squeeze(A[1,:,:], 1)

我可以在这看到混乱的根源。我猜你注意到了:

B[1, :]

返回类型Vector,并且您假设自动压缩的相同原理适用于更高维数组。 github发布页面,其中围绕此类行为的问题已解决here。有趣的阅​​读。