2015-03-20 16 views
10

Hãy nói rằng tôi có một biến Array gọi p:Làm cách nào để chuyển đổi một mảng Singleton thành vô hướng?

julia> p = [5] 
julia> typeof(p) 
Array{Int64,1} 

Làm thế nào tôi nên chuyển nó sang SCALAR? p cũng có thể 2 chiều:

julia> p = [1]'' 
julia> typeof(p) 
Array{Int64,2} 

(Lưu ý: các transpose lừa đôi để tăng dimentionality might not work in future versions of Julia)

Qua thao tác thích hợp, tôi có thể làm p của bất kỳ kích thước, nhưng làm thế nào tôi nên giảm nó để một vô hướng?


Một giải pháp khả thi là p=p[1], nhưng điều đó sẽ không ném bất kỳ lỗi nếu p có nhiều hơn một phần tử trong p; vì vậy, điều đó không tốt với tôi. tôi có thể xây dựng chức năng của riêng tôi (với việc kiểm tra),

function scalar(x) 
    assert(length(x) == 1) 
    x[1] 
end 

nhưng nó có vẻ như nó phải được reinventing the wheel.

Điều gì không hoạt động là squeeze, chỉ đơn giản là bóc các thứ nguyên cho đến khi p là mảng không theo chiều.

(Liên quan đến Julia: convert 1x1 array from inner product to number nhưng, trong trường hợp này, vận hành-agnostic).

Trả lời

7

Nếu bạn muốn nhận được vô hướng nhưng ném ra một lỗi nếu mảng là hình dạng sai, bạn có thể 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 
Các vấn đề liên quan