Как преобразовать одноэлементный массив в скаляр?
Скажем, у меня есть переменная Array
, называемая p
:
julia> p = [5]
julia> typeof(p)
Array{Int64,1}
Как мне преобразовать его в скаляр? p
также может быть двумерным:
julia> p = [1]''
julia> typeof(p)
Array{Int64,2}
(Примечание: двойной трансформаторный трюк для увеличения размерности может не работать в будущих версиях 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