Julia中是否存在一个单元格数组?我想要一个数组,其元素是向量或矩阵。
例如A={1,[2 3],[5 6;7 8];"salam", [1 2 3 4],magic(5)}
。
如果您不介意,请帮助我。
答案 0 :(得分:3)
Array{Any}
等效于MATLAB单元格数组。您可以在其中放任何东西。 ["hi",:bye,10]
。 a = Array{Any}(undef,5)
构建了一个未初始化的变量,您可以a[1] = ...
修改值,push!(a,...)
来增加其长度,等等。
答案 1 :(得分:3)
单元格数组是一种具有索引数据容器(称为单元格)的数据类型,其中每个单元格可以包含任何类型的数据
在Julia中,数组可以包含同构([1, 2, 3]
)或异构类型([1, 2.5, "3"]
)的值。 Julia将尝试默认将值提升为常见的具体类型。如果Julia无法提升所包含的类型,则结果数组将为抽象类型 Any
。
使用Julia 1.0.3从Access Data in Cell Array移植的示例:
julia> C = ["one" "two" "three"; # Matrix literal
1 2 3 ]
2×3 Array{Any,2}:
"one" "two" "three"
1 2 3
julia> upperLeft = C[1:2,1:2] # slicing
2×2 Array{Any,2}:
"one" "two"
1 2
julia> C[1,1:3] = ["first","second","third"] # slice assignment
3-element Array{String,1}:
"first"
"second"
"third"
julia> C
2×3 Array{Any,2}:
"first" "second" "third"
1 2 3
julia> numericCells = C[2,1:3]
3-element Array{Any,1}:
1
2
3
julia> last = C[2,3] # indexing
3
julia> C[2,3] = 300 # indexing assignment
300
julia> C
2×3 Array{Any,2}:
"first" "second" "third"
1 2 300
julia> r1c1, r2c1, r1c2, r2c2 = C[1:2,1:2] # destructuring
2×2 Array{Any,2}:
"first" "second"
1 2
julia> r1c1
"first"
julia> r2c1
1
julia> r1c2
"second"
julia> r2c2
2
julia> nums = C[2,:]
3-element Array{Any,1}:
1
2
300
从Combining Cell Arrays with Non-Cell Arrays移植的示例:
请注意使用 splice 运算符(...
)将内部数组的值合并到外部数组中,并使用Any[]
语法防止朱莉娅从将UInt8
提升为Int
。
julia> A = [100, Any[UInt8(200), 300]..., "Julia"]
4-element Array{Any,1}:
100
0xc8
300
"Julia"
.(
广播语法对元素typeof
明智地应用了函数。
julia> typeof.(A)
4-element Array{DataType,1}:
Int64
UInt8
Int64
String
因此,总而言之,Julia不需要单元格数组,而是使用参数n维数组。此外,Julia仅对切片和索引使用括号(A[n]
,A[i, j]
,A[a:b, x:y]
),在为函数调用保留变量符号(foo()
,{{1 }},foo(args...)
。