Как и в других программах, под массивами в Julia понимается коллекция упорядоченных элементов, размещённая в многомерной сетке. Векторы и матрицы являются частными случаями массивов.
В Julia предусмотрено достаточно много способов создать массив (с учётом типа, значения, размерности и пр.), но по моему скромному мнению в большинстве случаев удобнее пойти путём Matlab-подобных сред и инициализировать массив через перечисление его элементов в квадратных скобках, разделяя строки знаком ";". Чтобы обратиться к элементу, укажите его индекс в квадратных скобках, если массив многомерный, перечислите индексы через запятую. Индексация, кстати, начинается с единицы. Для облегчения доступа индекс последнего элемента хранится в переменной end.
Вот некоторые из базовых функций для работы с массивами.
length(A) - число элементов.
ndims(A) - число размерностей.
size(A) - кортеж размерностей.
size(A, n) - размерность в заданном направлении.
copy(A) - создание копии массива.
linspace(начало, конец, шаг) - создание одномерного массива, что можно также записать в виде "начало:шаг:конец".
Для конкатенации предусмотрена функция cat(k, A ...), которая объединяет массивы вдоль размерность k. Её частными случаями являются vcat(A...)==cat(1, A...) и hcat(A...)==cat(2, A...). Однако, поддерживается и "привычная" форма записи с перечислением массивов в квадратных скобках, как в Freemat, Scilab и пр. И точно также вы можете выделять часть массива, задавая диапазон индексов по осям через знак ":".
В примере использованы функции rand(), возвращающая массив случайных чисел заданной размерности, а также reshape(), изменяющая размерность массива на указанную.
В функциях часто требуется пройтись по всем элементам массива. Для этого предусмотрены конструкции
for a in A
# действия над a из массива A
end
и
for i in eachindex(A)
# действия с учётом индекса i
end
Что касается арифметических операций и элементарных функций, практически все они применимы к массивам. Если при этом операции должны выполняться поэлементно, их запись следует предварять точкой.
При работе с матрицами, как и в Matlab-подобных системах, вы можете вычислить определитель функцией det(A), выполнить транспонирование с помощью апострофа (A'), инвертировать через inv(A). Также поддерживается работа с разряжёнными матрицами и различные типы разложения на множители, но это уже совсем другая история...
Комментариев нет:
Отправить комментарий