Как преобразовать одноэлементный массив в скалярный?
Допустим у меня есть Array
переменной называется p
:
julia> p = [5]
julia> typeof(p)
Array{Int64,1}
как преобразовать его в скалярный? p
также может быть 2-мерное:
julia> p = [1]''
julia> typeof(p)
Array{Int64,2}
(Примечание: двойной транспонировать трюк, чтобы увеличить dimentionality может не работать в будущих версиях Julia)
через соответствующие манипуляции, я могу сделать p
любого измерения, но как я должен уменьшить его до скаляра?
один жизнеспособный подход p=p[1]
, но это не приведет к ошибке, если p
имеет более одного элемента в p
; так что мне это не подходит.
Я мог бы создать свою собственную функцию (с проверкой),
function scalar(x)
assert(length(x) == 1)
x[1]
end
но похоже, что это должно быть изобретение колеса.
что не работает squeeze
, который просто слезает размеры до p
представляет собой нуль-мерный массив.
(относительно Julia: преобразование массива 1x1 из внутреннего продукта в число но, в данном случае, операция-агностическая.)
1 ответов
Если вы хотите получить скаляр, но бросить ошибку, если массив неправильной формы, вы могли бы reshape
:
julia> p1 = [4]; p2 = [5]''; p0 = []; p3 = [6,7];
julia> reshape(p1, 1)[1]
4
julia> reshape(p2, 1)[1]
5
julia> reshape(p0, 1)[1]
ERROR: DimensionMismatch("new dimensions (1,) must be consistent with array size 0")
in reshape at array.jl:122
in reshape at abstractarray.jl:183
julia> reshape(p3, 1)[1]
ERROR: DimensionMismatch("new dimensions (1,) must be consistent with array size 2")
in reshape at array.jl:122
in reshape at abstractarray.jl:183