.*
и .+
не требуют, чтобы его операнды имели одинаковую форму. При необходимости и совпадении размеров они могут транслироваться. Если, например, ixp
является массивом с одной записью , эта строка все равно должна вычисляться без ошибки. Смотрите следующий пример:
julia> a = rand(1:5, 4, 4, 2)
4×4×2 Array{Int64,3}:
[:, :, 1] =
1 4 3 5
2 1 1 1
3 4 1 2
3 5 1 3
[:, :, 2] =
4 4 1 5
3 4 4 4
5 3 2 3
5 3 4 4
julia> a[[1], :, :]
1×4×2 Array{Int64,3}:
[:, :, 1] =
1 4 3 5
[:, :, 2] =
4 4 1 5
julia> a .* a[[1], :, :]
4×4×2 Array{Int64,3}:
[:, :, 1] =
1 16 9 25
2 4 3 5
3 16 3 10
3 20 3 15
[:, :, 2] =
16 16 1 25
12 16 4 20
20 12 2 15
20 12 4 20
julia> a .* a[[1,1,1,1], :, :] # should give the same results as the prev. command
4×4×2 Array{Int64,3}:
[:, :, 1] =
1 16 9 25
2 4 3 5
3 16 3 10
3 20 3 15
[:, :, 2] =
16 16 1 25
12 16 4 20
20 12 2 15
20 12 4 20
Размер результирующего view
зависит от аргумента индексации ixp
. Если ixp
имеет тот же размер, что и размер первого измерения psi
, то результирующее представление будет той же формы, что и psi
, но, возможно, с другим порядком в первом измерении, поскольку ixp
может быть [2,3,4,1] или [2,3,1,1]. Если это так, то поведение такое же, как в вашем коде C # . Другой случай, когда эта строка все еще должна вычисляться без ошибки, - это случай, когда ixp
является массивом с одной записью, и поведение такое же, как в приведенном выше фрагменте. Если ixp
является одной записью, результаты будут такими же, как если бы эта же запись повторялась столько же раз, сколько и размер первого измерения psi
(как в последней команде фрагмента выше). Итак, поскольку вы реализовали В первом случае поведение в другом случае (одиночная запись ixp
) также может быть легко реализовано.
В других размерах ixp
должна быть ошибка из-за DimensionMismatch
.
Кажется, ваш код C # правильно реализует поведение в первом случае.
Если вы пытаетесь перевести этот проект Julia на другой язык, то было бы полезно, если бы у вас было больше информации о лежащей в основе проблеме, может быть ixp
всегда должен иметь размер, равный psi
в первом измерении , Рассматривая примеры и другой код в этом репозитории Github, я думаю, что это так. ixp
используется только для изменения порядка первого измерения psi
. Даже если это не так, нет большой проблемы, поскольку есть только два жизнеспособных случая, как упомянуто выше.