Юлия — основные структуры данных

искусственный интеллект анализ данных Julia сбор данных
Юлия — основные структуры данных

предвидение

Я рад, что вы увидели эту статью, но есть несколько вещей, которые я должен сообщить вам заранее, чтобы не тратить ваше время.

Это всего лишь мои учебные заметки, очень поверхностные и беспорядочные. Эта статья подходит только для вас, чтобы просмотреть или убить время.Содержание в целом подходит для последовательного чтения.При необходимости, вы можете связаться со мной для общения.

Основные структуры данных, рассматриваемые в Julia, следующие и представлены в этой статье в таком порядке:

  • кортеж
  • Словарь
  • множество

кортеж

Оберните упорядоченный набор элементов в круглые скобки для создания кортежей, разделенных запятыми.Основное использование ничем не отличается от Python.

Syntax:

(item1, item2, ...)

Примеры следующие:

myfavoriteanimals = ("penguins", "cats", "sugargliders")
# ("penguins", "cats", "sugargliders")

myfavoriteanimals[1] 
# "penguins"

myfavoriteanimals[1] = "otters" # 元组是不可变的,无法更新数据
# ERROR: MethodError: no method matching setindex!(::Tuple{String,String,String}, ::String, ::Int64)

В отличие от Python, Julia был расширен (версия 1.0 и выше), чтобы компоненты в кортежах могли называться:

myfavoriteanimals = (bird = "penguins", mammal = "cats", marsupial = "sugargliders")
# (bird = "penguins", mammal = "cats", marsupial = "sugargliders")

myfavoriteanimals[1] 
# "penguins"

myfavoriteanimals.bird
# "penguins"

Словарь

Для создания словаря нужно передать встроенныйDict()Функция, параметр функции может быть пустым или парой ключ-значение, пара ключ-значение должна использовать символ стрелки=>ассоциировать.

Syntax:

Dict(key1 => value1, key2 => value2, ...)

Примеры следующие:

myphonebook = Dict("Jenny" => "867-5309", "Ghostbusters" => "555-2368")
# Dict{String,String} with 2 entries:
#   "Jenny"        => "867-5309"
#   "Ghostbusters" => "555-2368"

myphonebook["Jenny"]
# "867-5309"

myphonebook["Kramer"] = "555-FILK"
# "555-FILK"

myphonebook
# Dict{String,String} with 3 entries:
#   "Jenny"        => "867-5309"
#   "Kramer"       => "555-FILK"
#   "Ghostbusters" => "555-2368"

ключKramerУдалить из словаря, вернуть значение как ключKramerСоответствующее значение:

pop!(myphonebook, "Kramer")
# "555-FILK"

myphonebook
# Dict{String,String} with 2 entries:
#   "Jenny"        => "867-5309"
#   "Ghostbusters" => "555-2368"

В отличие от кортежей и массивов, элементы в словаре не являются последовательными и не могут быть проиндексированы числами.В следующем примере Джулия попытается получить значение, соответствующее ключу «1»:

myphonebook[1]
# KeyError: key 1 not found

множество

И массивы, и кортежи содержат упорядоченные наборы, но массивы можно обновлять. Используйте квадратные скобки, чтобы различать массивы и кортежи. Основное использование такое же, как и в Python:

Syntax:

[item1, item2, ...]
myfriends = ["Ted", "Robyn", "Barney", "Lily", "Marshall"]
# 5-element Array{String,1}:
#  "Ted"
#  "Robyn"
#  "Barney"
#  "Lily"
#  "Marshall"

Вернемся к подсказке:

  • 5-elementОбщее количество элементов в массиве равно 5
  • Array{String,1}Указывает, что текущий массив
  • StringУказывает, что каждый элемент массиваStringТип, если в массиве несколько типов данных, он будет отображаться здесьany
  • 1Указывает, что это одномерный вектор, или, если это двумерная матрица, тоArray{String,2}, трехмерныйArray{String,3}и т. д., Julia намного легче понять, чем Python, в отображении информации о размерности многомерных массивов, что будет видно позже.

Julia полностью отличается от Python во многих отношениях, таких как индексирование с 1, что может быть менее проблематично позже, но кто знает, вы знаете.

myfriends[0]
# ERROR: BoundsError: attempt to access 5-element Array{String,1} at index [0]

myfriends[1]
# "Ted"

Другой пример — добавление строки к массиву чисел, что можно легко сделать в Python:

a = [1,2,3]
a.append("1")
print(a)
# [1, 2, 3, '1']

А вот в Юле не так много свободы, если в массиве строкmyfriendsЕсли вы вставите число, вы получите ошибку:

push!(myfriends, 1)
# ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type String

Но если вы начнете с создания нового содержащего элемента какAny, то можно выполнить любой тип вставки:

a = [1,2,3,"3"]
# 4-element Array{Any,1}:
#  1
#  2
#  3
# "3"

pop!(a) 
# "3"

a # 看下面,返回信息中提示当前数组内允许Any类型的数据存在
# 3-element Array{Any,1}:
#  1
#  2
#  3

push!(a, "1")
# 5-element Array{Any,1}:
#  1 
#  2
#  3
# "1"

Массивы в Julia содержат гораздо больше информации о размерах, чем в Python.Следующее создает двумерный массив:

favorites = [["koobideh", "chocolate", "eggs"],["penguins", "cats", "sugargliders"]]
# 2-element Array{Array{String,1},1}:
#  ["koobideh", "chocolate", "eggs"]
#  ["penguins", "cats", "sugargliders"]
  • внешний2-element Array{...}Указывает, что самый внешний слой содержит два элемента, оба из которыхArray{String,1}тип,1Указывает, что самое внешнее измерение равно 1.
  • Каждый элемент, содержащийся во внешнем слое, упомянутом выше, являетсяArray{String,1}тип,1Указывает, что все они являются одномерными векторами, количество элементов не указано, но типы элементовString.
numbers = [[[1], [2], [3]], [[4], [5]]]
# 2-element Array{Array{Array{Int64,1},1},1}:
#  [[1], [2], [3]]
#  [[4], [5]]

В приведенном выше примере показан трехмерный массив, и количество элементов в каждом измерении не обязательно должно быть одинаковым. Как и в Python, julia по умолчанию является мелкой копией.Если вы хотите сделать глубокую копию, вы можете напрямую использовать встроенныйcopyфункция:

a = [1,2,3]
# 3-element Array{Int64,1}:
#  1
#  2
#  3
 
b = a # 浅拷贝
# 3-element Array{Int64,1}:
#  1
#  2
#  3
 
b[1] = 111
#  111
 
a,b
# ([111, 2, 3], [111, 2, 3])
   
c = copy(a) # 深拷贝
# 3-element Array{Int64,1}:
#  111
#    2
#    3
   
c[1] = 1
# 1

a, b ,c
# ([111, 2, 3], [111, 2, 3], [1, 2, 3])

Выше приведены основные структуры данных в Julia.