如何在Julia中创建一个单元格数组?

时间:2019-05-09 05:50:37

标签: julia

Julia中是否存在一个单元格数组?我想要一个数组,其元素是向量或矩阵。 例如A={1,[2 3],[5 6;7 8];"salam", [1 2 3 4],magic(5)}

如果您不介意,请帮助我。

2 个答案:

答案 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...)