Как я могу иметь массив ячеек в Юлии? - PullRequest
1 голос
/ 09 мая 2019

Существует ли массив ячеек в Юлии? Мне нужен массив, элементами которого являются вектор или матрица. например A={1,[2 3],[5 6;7 8];"salam", [1 2 3 4],magic(5)}.

если не возражаете, пожалуйста, помогите мне.

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Массив ячеек - это тип данных с индексированными контейнерами данных, называемыми ячейками, где каждая ячейка может содержать любой тип данных

В Julia массивы могут содержать значения однородного ([1, 2, 3]) или разнородного типов ([1, 2.5, "3"]). Юлия по умолчанию попытается перевести значения в общий конкретный тип. Если Джулия не может продвигать содержащиеся типы, результирующий массив будет иметь абстрактный тип Any.

Пример перенесен из Доступ к данным в массиве ячеек , с использованием Julia 1.0.3:

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

Пример перенесен из Объединение ячеистых массивов с не ячейками :

Обратите внимание на использование оператора 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

Таким образом, в итоге Юлии не нужны массивы ячеек, вместо этого она использует параметрические n-мерные массивы. Также Юлия использует только скобки для нарезки и индексации (A[n], A[i, j], A[a:b, x:y]), скобки после того, как символ переменной зарезервирован для вызовов функций (foo(), foo(args...), foo(bar = "baz")).

3 голосов
/ 09 мая 2019

Array{Any} эквивалентно массиву ячеек MATLAB.Вы можете положить что-нибудь там.["hi",:bye,10].a = Array{Any}(undef,5) создает неинициализированный, вы можете a[1] = ... изменить значения, push!(a,...) увеличить его длину и т. Д.

...