Массивы
Основные функции
-
ndims(A::AbstractArray) → Integer -
Возвращает количество измерений
A.julia> A = ones(3,4,5); julia> ndims(A) 3
-
size(A::AbstractArray[, dim...]) -
Возвращает кортеж, содержащий размеры
A. Дополнительно можно указать размерность(и), длину которой требуется получить, и получить длину этой размерности или кортеж длин указанных размерностей.julia> A = ones(2,3,4); julia> size(A, 2) 3 julia> size(A,3,2) (4,3)
-
indices(A) -
Возвращает кортеж допустимых индексов для массива
A.
-
indices(A, d) -
Возвращает допустимый диапазон индексов для массива
Aвдоль размерностиd.
-
length(A::AbstractArray) → Integer -
Возвращает количество элементов в
A.julia> A = ones(3,4,5); julia> length(A) 60
-
eachindex(A...) -
Создаёт итерируемый объект для посещения каждого индекса абстрактного массива
Aэффективным способом. Для типов массивов, которые выбрали быструю линейную индексацию (например,Array), это просто диапазон1:length(A). Для других типов массивов это возвращает специализированный декартов диапазон для эффективной индексации в массив с индексами, указанными для каждой размерности. Для других итерируемых объектов, включая строки и словари, возвращается объект-итератор, поддерживающий произвольные типы индексов (например, неравномерно расположенные или нецелочисленные индексы).Пример для разреженного 2-мерного массива:
julia> A = sparse([1, 1, 2], [1, 3, 1], [1, 2, -5]) 2×3 sparse matrix with 3 Int64 nonzero entries: [1, 1] = 1 [2, 1] = -5 [1, 3] = 2 julia> for iter in eachindex(A) @show iter.I[1], iter.I[2] @show A[iter] end (iter.I[1],iter.I[2]) = (1,1) A[iter] = 1 (iter.I[1],iter.I[2]) = (2,1) A[iter] = -5 (iter.I[1],iter.I[2]) = (1,2) A[iter] = 0 (iter.I[1],iter.I[2]) = (2,2) A[iter] = 0 (iter.I[1],iter.I[2]) = (1,3) A[iter] = 2 (iter.I[1],iter.I[2]) = (2,3) A[iter] = 0Если вы передаёте более одного
AbstractArrayаргумента,eachindexсоздаст итерируемый объект, который быстрый для всех аргументов (диапазонUnitRangeесли все входные данные поддерживают быструю линейную индексацию, в противном случае — декартов диапазон). Если массивы имеют разные размеры и/или размерности,eachindexвозвращает итерируемый объект, охватывающий наибольший диапазон по каждой размерности.
-
linearindices(A) -
Возвращает
UnitRange, определяющий допустимый диапазон индексов дляA[i], гдеiявляетсяInt. Для массивов с традиционной индексацией (индексы начинаются с 1) или любого многомерного массива это1:length(A); однако, для одномерных массивов с нетрадиционными индексами этоindices(A, 1).Вызов этой функции — «безопасный» способ написания алгоритмов, использующих линейную индексацию.
-
Base.linearindexing(A) -
linearindexingопределяет, как абстрактный массив наиболее эффективно обращается к своим элементам. ЕслиBase.linearindexing(A)возвращаетBase.LinearFast(), это означает, что линейная индексация с одним индексом — эффективная операция. Если вместо этого возвращаетсяBase.LinearSlow()(по умолчанию), это означает, что массив изначально обращается к своим элементам с индексами, указанными для каждой размерности. Поскольку преобразование линейного индекса в несколько индексов подстроки обычно очень дорого, это предоставляет механизм на основе свойств для включения эффективного обобщённого кода для всех типов массивов.Подтип абстрактного массива
MyArray, который хочет воспользоваться преимуществами быстрой линейной индексации, должен определитьlinearindexingв области типов:Base.linearindexing{T<:MyArray}(::Type{T}) = Base.LinearFast()
-
countnz(A) -
Подсчитывает количество ненулевых значений в массиве
A(плотный или разреженный). Обратите внимание, что это не операция с постоянным временем. Для разреженных матриц обычно следует использоватьnnz, которое возвращает количество сохранённых значений.
-
conj!(A) -
Преобразует массив в его комплексно-сопряжённое значение на месте.
-
stride(A, k::Integer) -
Возвращает расстояние в памяти (в количестве элементов) между смежными элементами в размерности
k.julia> A = ones(3,4,5); julia> stride(A,2) 3 julia> stride(A,3) 12
-
strides(A) -
Возвращает кортеж сдвигов памяти в каждой размерности.
julia> A = ones(3,4,5); julia> strides(A) (1,3,12)
-
ind2sub(dims, index) → subscripts -
Возвращает кортеж индексов в массив с размерами
dims, соответствующий линейному индексуindex.Пример:
i, j, ... = ind2sub(size(A), indmax(A))
предоставляет индексы максимального элемента.
-
ind2sub(a, index) → subscripts -
Возвращает кортеж индексов в массив
aсоответствующий линейному индексуindex.
-
sub2ind(dims, i, j, k...) → index -
Обратное к
ind2sub, возвращает линейный индекс, соответствующий предоставленным индексам подстроки.
-
LinAlg.checksquare(A) -
Проверяет, является ли матрица квадратной, затем возвращает её общую размерность. Для нескольких аргументов возвращает вектор.
Конструкторы
-
Array(dims) -
Array{T}(dims)создаёт неинициализированный плотный массив с типом элементовT.dimsможет быть кортежем или рядом целых чисел. Также доступен синтаксисArray(T, dims), но он устарел.
-
getindex(type[, elements...]) -
Создаёт одномерный массив указанного типа. Обычно вызывается с синтаксисом
Type[]. Значения элементов можно указать с помощьюType[a,b,c,...].
-
zeros(type, dims) -
Создаёт массив из нулей указанного типа. Тип по умолчанию — Float64, если не указан.
-
zeros(A) -
Создаёт массив из нулей с тем же типом элементов и формой, что и
A.
-
ones(type, dims) -
Создаёт массив из единиц указанного типа. Тип по умолчанию —
Float64, если не указан.
-
ones(A) -
Создаёт массив из единиц с тем же типом элементов и формой, что и
A.
-
trues(dims) -
Создаёт
BitArrayсо всеми значениями, установленными вtrue.
-
trues(A) -
Создаёт
BitArrayсо всеми значениями, установленными вtrueтой же формы, что иA.
-
falses(dims) -
Создаёт
BitArrayсо всеми значениями, установленными вfalse.
-
falses(A) -
Создаёт
BitArrayсо всеми значениями, установленными вfalseтой же формы, что иA.
-
fill(x, dims) -
Создаёт массив, заполненный значением
x. Например,fill(1.0, (10,10))возвращает массив 10×10 чисел с плавающей точкой, где каждый элемент инициализирован значением1.0.Если
x— ссылка на объект, все элементы будут ссылаться на один и тот же объект.fill(Foo(), dims)вернёт массив, заполненный результатом вычисленияFoo()один раз.
-
fill!(A, x) -
Заполняет массив
Aзначениемx. Еслиx— ссылка на объект, все элементы будут ссылаться на один и тот же объект.fill!(A, Foo())вернётAзаполненный результатом вычисленияFoo()один раз.
-
reshape(A, dims) -
Создаёт массив с теми же данными, что и заданный массив, но с другими измерениями.
-
similar(array[, element_type=eltype(array)][, dims=size(array)]) -
Создаёт неинициализированный изменяемый массив с заданным типом элементов и размером, основанный на заданном исходном массиве. Второй и третий аргументы необязательны, по умолчанию они принимают значения
eltypeиsizeзаданного массива. Размеры можно указать как одиночным кортежем, так и рядом целых чисел.Пользовательские подтипы AbstractArray могут выбрать, какой конкретный тип массива лучше всего подходит для возврата для заданного типа элементов и размерности. Если они не специализируют этот метод, по умолчанию используется
Array{element_type}(dims...).Например,
similar(1:10, 1, 4)возвращает неинициализированныйArray{Int,2}, поскольку диапазоны не изменяемы и не поддерживают 2 измерения:julia> similar(1:10, 1, 4) 1×4 Array{Int64,2}: 4419743872 4374413872 4419743888 0Напротив,
similar(trues(10,10), 2)возвращает неинициализированныйBitVectorс двумя элементами, так какBitArrayоба изменяемы и могут поддерживать одномерные массивы:julia> similar(trues(10,10), 2) 2-element BitArray{1}: false falseПоскольку
BitArrayмогут хранить только элементы типаBool, однако, если вы запросите другой тип элементов, он создаст обычныйArrayвместо него:julia> similar(falses(10), Float64, 2, 4) 2×4 Array{Float64,2}: 2.18425e-314 2.18425e-314 2.18425e-314 2.18425e-314 2.18425e-314 2.18425e-314 2.18425e-314 2.18425e-314
-
similar(storagetype, indices) -
Создаёт неинициализированный изменяемый массив, аналогичный тому, что задан
storagetype, но сindices, указанным последним аргументом.storagetypeможет быть типом или функцией.Примеры:
similar(Array{Int}, indices(A))создаёт массив, который «ведёт себя как»
Array{Int}(и, возможно, на самом деле под ним лежит такой), но который индексируется так же, как иA. Если уAтрадиционная индексация, это будет идентичноArray{Int}(size(A)), но если уAнетрадиционная индексация, то индексы результата будут соответствоватьA.similar(BitArray, (indices(A, 2),))
создаст одномерный логический массив, чьи индексы соответствуют столбцам
A.similar(dims->zeros(Int, dims), indices(A))
создаст массив
Int, инициализированный нулями, соответствующий индексамA.
-
reinterpret(type, A) -
Изменяет интерпретацию блока памяти. Например,
reinterpret(Float32, UInt32(7))интерпретирует 4 байта, соответствующиеUInt32(7)какFloat32. Для массивов это создаёт массив с теми же двоичными данными, что и заданный массив, но с указанным типом элемента.
-
eye([T::Type=Float64, ]n::Integer) -
n-строчная/nединичная матрица. По умолчанию используется тип элементовFloat64.
-
eye([T::Type=Float64, ]m::Integer, n::Integer) -
m-строчная/nединичная матрица. По умолчанию используется тип элементовFloat64.
-
eye(A) -
Создаёт единичную матрицу с теми же размерами и типом, что и
A.julia> A = [1 2 3; 4 5 6; 7 8 9] 3×3 Array{Int64,2}: 1 2 3 4 5 6 7 8 9 julia> eye(A) 3×3 Array{Int64,2}: 1 0 0 0 1 0 0 0 1Обратите внимание на разницу с
ones().
-
linspace(start, stop, n=50) -
Создаёт диапазон
nлинейно расположенных элементов отstartдоstop.
-
logspace(start, stop, n=50) -
Создаёт вектор из
nлогарифмически распределённых чисел от10^startдо10^stop.
Математические операторы и функции
Все математические операции и функции поддерживаются для массивов
-
broadcast(f, As...) -
Расширяет массивы
Asдо общего размера, увеличивая размерность единичных элементов, и возвращает массив результатовf(as...)для каждой позиции.
-
broadcast!(f, dest, As...) -
Как
broadcast, но сохраняет результатbroadcast(f, As...)в массивdest. Обратите внимание, чтоdestиспользуется только для хранения результата и не предоставляет аргументы дляfза исключением случаев, когда он также указан вAs, как вbroadcast!(f, A, A, B)для выполненияA[:] = broadcast(f, A, B).
-
bitbroadcast(f, As...) -
Как
broadcast, но выделяетBitArrayдля хранения результата, а неArray.
Индексирование, присваивание и конкатенация
-
getindex(A, inds...) -
Возвращает подмножество массива
Aпо указаниюinds, где каждыйindможет бытьInt,Range, илиVector. Подробности см. в разделе руководства по индексированию массивов.
-
view(A, inds...) -
Аналогично
getindex(), но возвращает представление в родительский массивAс указанными индексами вместо копирования. Вызовgetindex()илиsetindex!()на возвращаемомSubArrayвычисляет индексы родительского массива на лету без проверки границ.
-
@view A[inds...] -
Создаёт
SubArrayиз выражения индексирования. Это можно применять только напрямую к выражению ссылки (например,@view A[1,2:end]), и его не следует использовать в качестве цели присваивания (например,@view(A[1,2:end]) = ...).
-
parent(A) -
Возвращает «родительский массив» типа представления массива (например,
SubArray) или сам массив, если он не является представлением.
-
parentindexes(A) -
Из представления массива
Aвозвращает соответствующие индексы в родителе.
-
slicedim(A, d, i) -
Возвращает все данные
Aгде индекс для измеренияdравенi. ЭквивалентноA[:,:,...,i,:,:,...], гдеiнаходится в позицииd.
-
setindex!(A, X, inds...) -
Сохраняет значения из массива
Xв подмножествеAпо указаниюinds.
-
broadcast_getindex(A, inds...) -
Расширяет массивы
indsдо общего размера, какbroadcast, и возвращает массив результатовA[ks...], гдеksперебирает позиции в расширении.
-
broadcast_setindex!(A, X, inds...) -
Расширяет массивы
Xиindsдо общего размера и сохраняет значение из каждой позиции вXпо индексам, заданным теми же позициями вinds.
-
isassigned(array, i) → Bool -
Проверяет, имеет ли данный массив значение, связанное с индексом
i. Возвращаетfalseесли индекс выходит за пределы, или ссылка не определена.
-
cat(dims, A...) -
Конкатенирует входные массивы вдоль указанных измерений в итерируемом
dims. Для измерений, не содержащихся вdims, все входные массивы должны иметь одинаковый размер, который также будет размером выходного массива вдоль этого измерения. Для измерений вdims, размер выходного массива — сумма размеров входных массивов вдоль этого измерения. Еслиdims— единственное число, разные массивы плотно уложены вдоль этого измерения. Еслиdims— итерируемый объект, содержащий несколько измерений, это позволяет строить блочно-диагональные матрицы и их аналоги более высокой размерности, одновременно увеличивая несколько измерений для каждого нового входного массива и размещая нулевые блоки в других местах. Например,cat([1,2], matrices...)создаёт блочно-диагональную матрицу, то есть блочную матрицу сmatrices[1],matrices[2], ... в качестве диагональных блоков и соответствующими нулевыми блоками вне диагонали.
-
vcat(A...) -
Конкатенация по измерению 1.
julia> a = [1 2 3 4 5] 1×5 Array{Int64,2}: 1 2 3 4 5 julia> b = [6 7 8 9 10; 11 12 13 14 15] 2×5 Array{Int64,2}: 6 7 8 9 10 11 12 13 14 15 julia> vcat(a,b) 3×5 Array{Int64,2}: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 julia> c = ([1 2 3], [4 5 6]) ( [1 2 3], [4 5 6]) julia> vcat(c...) 2×3 Array{Int64,2}: 1 2 3 4 5 6
-
hcat(A...) -
Конкатенация по измерению 2.
julia> a = [1; 2; 3; 4; 5] 5-element Array{Int64,1}: 1 2 3 4 5 julia> b = [6 7; 8 9; 10 11; 12 13; 14 15] 5×2 Array{Int64,2}: 6 7 8 9 10 11 12 13 14 15 julia> hcat(a,b) 5×3 Array{Int64,2}: 1 6 7 2 8 9 3 10 11 4 12 13 5 14 15 julia> c = ([1; 2; 3], [4; 5; 6]) ([1,2,3],[4,5,6]) julia> hcat(c...) 3×2 Array{Int64,2}: 1 4 2 5 3 6
-
hvcat(rows::Tuple{Vararg{Int}}, values...) -
Горизонтальная и вертикальная конкатенация в одном вызове. Эта функция вызывается для синтаксиса блочной матрицы. Первый аргумент задаёт количество аргументов для конкатенации в каждой строке блока.
julia> a, b, c, d, e, f = 1, 2, 3, 4, 5, 6 (1,2,3,4,5,6) julia> [a b c; d e f] 2×3 Array{Int64,2}: 1 2 3 4 5 6 julia> hvcat((3,3), a,b,c,d,e,f) 2×3 Array{Int64,2}: 1 2 3 4 5 6 julia> [a b;c d; e f] 3×2 Array{Int64,2}: 1 2 3 4 5 6 julia> hvcat((2,2,2), a,b,c,d,e,f) 3×2 Array{Int64,2}: 1 2 3 4 5 6Если первый аргумент — единственное целое число
n, все строки блока предполагаютnстолбцов блока.
-
flipdim(A, d) -
Переворачивает
Aпо измерениюd.julia> b = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> flipdim(b,2) 2×2 Array{Int64,2}: 2 1 4 3
-
circshift(A, shifts) -
Циклически сдвигает данные в массиве. Второй аргумент — вектор, указывающий величину сдвига по каждому измерению.
julia> b = reshape(collect(1:16), (4,4)) 4×4 Array{Int64,2}: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 julia> circshift(b, (0,2)) 4×4 Array{Int64,2}: 9 13 1 5 10 14 2 6 11 15 3 7 12 16 4 8 julia> circshift(b, (-1,0)) 4×4 Array{Int64,2}: 2 6 10 14 3 7 11 15 4 8 12 16 1 5 9 13
-
find(A) -
Возвращает вектор линейных индексов ненулевых элементов в
A(определённыхA[i]!=0). Распространённое применение — преобразование булевого массива в массив индексовtrueэлементов. Если нет ненулевых элементов вA,findвозвращает пустой массив.julia> A = [true false; false true] 2×2 Array{Bool,2}: true false false true julia> find(A) 2-element Array{Int64,1}: 1 4
-
find(f::Function, A) -
Возвращает вектор
Iлинейных индексовAгдеf(A[I])возвращаетtrue. Если таких элементов вAнет, find возвращает пустой массив.julia> A = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> find(isodd,A) 2-element Array{Int64,1}: 1 2
-
findn(A) -
Возвращает вектор индексов для каждого измерения, указывающий местоположения ненулевых элементов в
A(определённыхA[i]!=0). Если нет ненулевых элементов вA,findnвозвращает кортеж из двух пустых массивов.julia> A = [1 2 0; 0 0 3; 0 4 0] 3×3 Array{Int64,2}: 1 2 0 0 0 3 0 4 0 julia> findn(A) ([1,1,3,2],[1,2,2,3]) julia> A = zeros(2,2) 2×2 Array{Float64,2}: 0.0 0.0 0.0 0.0 julia> findn(A) (Int64[],Int64[])
-
findnz(A) -
Возвращает кортеж
(I, J, V), гдеIиJ— индексы строк и столбцов ненулевых значений в матрицеA, иV— вектор ненулевых значений.julia> A = [1 2 0; 0 0 3; 0 4 0] 3×3 Array{Int64,2}: 1 2 0 0 0 3 0 4 0 julia> findnz(A) ([1,1,3,2],[1,2,2,3],[1,2,4,3])
-
findfirst(A) -
Возвращает линейный индекс первого ненулевого значения в
A(определённогоA[i]!=0). Возвращает0если такое значение не найдено.julia> A = [0 0; 1 0] 2×2 Array{Int64,2}: 0 0 1 0 julia> findfirst(A) 2
-
findfirst(A, v) -
Возвращает линейный индекс первого элемента, равного
vвA. Возвращает0еслиvне найден.julia> A = [4 6; 2 2] 2×2 Array{Int64,2}: 4 6 2 2 julia> findfirst(A,2) 2 julia> findfirst(A,3) 0
-
findfirst(predicate::Function, A) -
Возвращает линейный индекс первого элемента
Aдля которогоpredicateвозвращаетtrue. Возвращает0если такого элемента нет.julia> A = [1 4; 2 2] 2×2 Array{Int64,2}: 1 4 2 2 julia> findfirst(iseven, A) 2 julia> findfirst(x -> x>10, A) 0
-
findlast(A) -
Возвращает линейный индекс последнего ненулевого значения в
A(определённогоA[i]!=0). Возвращает0если вAнет ненулевых значений.julia> A = [1 0; 1 0] 2×2 Array{Int64,2}: 1 0 1 0 julia> findlast(A) 2 julia> A = zeros(2,2) 2×2 Array{Float64,2}: 0.0 0.0 0.0 0.0 julia> findlast(A) 0
-
findlast(A, v) -
Возвращает линейный индекс последнего элемента, равного
vвA. Возвращает0если нет элементаAравногоv.julia> A = [1 2; 2 1] 2×2 Array{Int64,2}: 1 2 2 1 julia> findlast(A,1) 4 julia> findlast(A,2) 3 julia> findlast(A,3) 0
-
findlast(predicate::Function, A) -
Возвращает линейный индекс последнего элемента
A, для которогоpredicateвозвращает значениеtrue. Возвращает0, если такого элемента нет.julia> A = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> findlast(isodd, A) 2 julia> findlast(x -> x > 5, A) 0
-
findnext(A, i::Integer) -
Находит следующий линейный индекс >=
iненулевого элементаA, или0если не найден.julia> A = [0 0; 1 0] 2×2 Array{Int64,2}: 0 0 1 0 julia> findnext(A,1) 2 julia> findnext(A,3) 0
-
findnext(predicate::Function, A, i::Integer) -
Находит следующий линейный индекс >=
iэлементаA, для которогоpredicateвозвращает значениеtrue, или0если не найден.julia> A = [1 4; 2 2] 2×2 Array{Int64,2}: 1 4 2 2 julia> findnext(isodd, A, 1) 1 julia> findnext(isodd, A, 2) 0
-
findnext(A, v, i::Integer) -
Находит следующий линейный индекс >=
iэлементаAравногоv(используя==), или0если не найден.julia> A = [1 4; 2 2] 2×2 Array{Int64,2}: 1 4 2 2 julia> findnext(A,4,4) 0 julia> findnext(A,4,3) 3
-
findprev(A, i::Integer) -
Находит предыдущий линейный индекс <=
iненулевого элементаA, или0если не найден.julia> A = [0 0; 1 2] 2×2 Array{Int64,2}: 0 0 1 2 julia> findprev(A,2) 2 julia> findprev(A,1) 0
-
findprev(predicate::Function, A, i::Integer) -
Находит предыдущий линейный индекс <=
iэлементаA, для которогоpredicateвозвращает значениеtrue, или0если не найден.julia> A = [4 6; 1 2] 2×2 Array{Int64,2}: 4 6 1 2 julia> findprev(isodd, A, 1) 0 julia> findprev(isodd, A, 3) 2
-
findprev(A, v, i::Integer) -
Находит предыдущий линейный индекс <=
iэлементаAравногоv(используя==), или0если не найден.julia> A = [0 0; 1 2] 2×2 Array{Int64,2}: 0 0 1 2 julia> findprev(A, 1, 4) 2 julia> findprev(A, 1, 1) 0
-
permutedims(A, perm) -
Переставляет размерности массива
A.perm- вектор, задающий перестановку длинойndims(A). Это обобщение транспонирования для многомерных массивов. Транспонирование эквивалентноpermutedims(A, [2,1]).
-
ipermutedims(A, perm) -
Подобно
permutedims(), за исключением того, что применяется обратная перестановка.
-
permutedims!(dest, src, perm) -
Переставляет размерности массива
srcи сохраняет результат в массивеdest.perm- вектор, задающий перестановку длинойndims(src). Предварительно выделенный массивdestдолжен иметь размерsize(dest) == size(src)[perm]и полностью перезаписывается. Поддержка работы на месте не реализована, и могут возникнуть неожиданные результаты, если массивыsrcиdestимеют перекрывающиеся области памяти.
-
squeeze(A, dims) -
Удаляет размерности, указанные в
dimsиз массиваA. Элементыdimsдолжны быть уникальными и находиться в диапазоне1:ndims(A).size(A,i)должны быть равны 1 для всехiвdims.julia> a = reshape(collect(1:4),(2,2,1,1)) 2×2×1×1 Array{Int64,4}: [:, :, 1, 1] = 1 3 2 4 julia> squeeze(a,3) 2×2×1 Array{Int64,3}: [:, :, 1] = 1 3 2 4
-
vec(a::AbstractArray) → Vector -
Преобразует массив
aв одномерный столбец.julia> a = [1 2 3; 4 5 6] 2×3 Array{Int64,2}: 1 2 3 4 5 6 julia> vec(a) 6-element Array{Int64,1}: 1 4 2 5 3 6
-
promote_shape(s1, s2) -
Проверяет совместимость двух форм массивов, разрешая конечные одиночные размерности, и возвращает форму с большим числом измерений.
-
checkbounds(A, I...) -
Выбрасывает ошибку, если указанные индексы
Iне находятся в пределах границ заданного массиваA.
-
checkbounds(Bool, A, I...) -
Возвращает
trueесли указанные индексыIнаходятся в границах заданного массиваA. ПодтипыAbstractArrayдолжны специализировать этот метод, если им необходимо предоставить пользовательское поведение проверки границ; однако, во многих случаях можно полагаться на индексыAиcheckindex.См. также
checkindex.
-
checkindex(Bool, inds::AbstractUnitRange, index) -
Возвращает
trueесли данныйindexнаходится в границахinds. Пользовательские типы, которые хотели бы действовать как индексы для всех массивов, могут расширить этот метод, чтобы предоставить специализированную реализацию проверки границ.
-
randsubseq(A, p) → Vector -
Возвращает вектор, состоящий из случайной подпоследовательности заданного массива
A, где каждый элементAвключается (в порядке) с независимой вероятностьюp. (Сложность линейна относительноp*length(A), поэтому эта функция эффективна даже еслиpмала, аAвелика.) В техническом плане этот процесс известен как «выборка Бернулли» изA.
-
randsubseq!(S, A, p) -
Как
randsubseq, но результаты сохраняются вS(размер которого изменяется по мере необходимости).
Функции массивов
-
cumprod(A, dim=1) -
Кумулятивное произведение по размерности
dim(по умолчанию 1). Также см.cumprod!()для использования предварительно выделенного выходного массива, как для производительности, так и для управления точностью выходных данных (например, для предотвращения переполнения).julia> a = [1 2 3; 4 5 6] 2×3 Array{Int64,2}: 1 2 3 4 5 6 julia> cumprod(a,1) 2×3 Array{Int64,2}: 1 2 3 4 10 18 julia> cumprod(a,2) 2×3 Array{Int64,2}: 1 2 6 4 20 120
-
cumprod!(B, A[, dim]) -
Кумулятивное произведение
Aпо размерности, сохраняющее результат вB. Размерность по умолчанию 1.
-
cumsum(A, dim=1) -
Кумулятивная сумма по размерности
dim(по умолчанию 1). Также см.cumsum!()для использования предварительно выделенного выходного массива, как для производительности, так и для управления точностью выходных данных (например, для предотвращения переполнения).julia> a = [1 2 3; 4 5 6] 2×3 Array{Int64,2}: 1 2 3 4 5 6 julia> cumsum(a,1) 2×3 Array{Int64,2}: 1 2 3 5 7 9 julia> cumsum(a,2) 2×3 Array{Int64,2}: 1 3 6 4 9 15
-
cumsum!(B, A[, dim]) -
Кумулятивная сумма
Aпо размерности, сохраняющее результат вB. Размерность по умолчанию 1.
-
cumsum_kbn(A[, dim]) -
Кумулятивная сумма по размерности, используя алгоритм компенсированной суммы Кахана-Бабушки-Неймайера для дополнительной точности. Размерность по умолчанию 1.
-
cummin(A[, dim]) -
Кумулятивный минимум по размерности. Размерность по умолчанию 1.
-
cummax(A[, dim]) -
Кумулятивный максимум по размерности. Размерность по умолчанию 1.
-
diff(A[, dim]) -
Оператор конечной разности матрицы или вектора.
-
gradient(F[, h]) -
Вычисляет разности вдоль вектора
F, используяhкак интервал между точками. Интервал по умолчанию равен 1.
-
rot180(A) -
Поворот матрицы
Aна 180 градусов.julia> a = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> rot180(a) 2×2 Array{Int64,2}: 4 3 2 1
-
rot180(A, k) -
Поворот матрицы
Aна 180 градусов целое числоkраз. Еслиkчётное, это эквивалентноcopy.julia> a = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> rot180(a,1) 2×2 Array{Int64,2}: 4 3 2 1 julia> rot180(a,2) 2×2 Array{Int64,2}: 1 2 3 4
-
rotl90(A) -
Поворот матрицы
Aвлево на 90 градусов.julia> a = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> rotl90(a) 2×2 Array{Int64,2}: 2 4 1 3
-
rotl90(A, k) -
Поворот матрицы
Aвлево на 90 градусов целое числоkраз. Еслиkравно нулю или кратно четырём, это эквивалентноcopy.julia> a = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> rotl90(a,1) 2×2 Array{Int64,2}: 2 4 1 3 julia> rotl90(a,2) 2×2 Array{Int64,2}: 4 3 2 1 julia> rotl90(a,3) 2×2 Array{Int64,2}: 3 1 4 2 julia> rotl90(a,4) 2×2 Array{Int64,2}: 1 2 3 4
-
rotr90(A) -
Поворот матрицы
Aвправо на 90 градусов.julia> a = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> rotr90(a) 2×2 Array{Int64,2}: 3 1 4 2
-
rotr90(A, k) -
Поворот матрицы
Aвправо на 90 градусов целое числоkраз. Еслиkравно нулю или кратно четырём, это эквивалентноcopy.julia> a = [1 2; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> rotr90(a,1) 2×2 Array{Int64,2}: 3 1 4 2 julia> rotr90(a,2) 2×2 Array{Int64,2}: 4 3 2 1 julia> rotr90(a,3) 2×2 Array{Int64,2}: 2 4 1 3 julia> rotr90(a,4) 2×2 Array{Int64,2}: 1 2 3 4
-
reducedim(f, A, region[, v0]) -
Применяет двухаргументную функцию
fпо размерностямA.region- вектор, определяющий размерности для сокращения, аv0- начальное значение, используемое в сокращениях. Для+,*,maxиminаргументv0необязателен.Ассоциативность сокращения зависит от реализации; если вам нужна определенная ассоциативность, например, слева направо, вы должны написать свой собственный цикл. Смотрите документацию по
reduce().julia> a = reshape(collect(1:16), (4,4)) 4×4 Array{Int64,2}: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 julia> reducedim(max, a, 2) 4×1 Array{Int64,2}: 13 14 15 16 julia> reducedim(max, a, 1) 1×4 Array{Int64,2}: 4 8 12 16
-
mapreducedim(f, op, A, region[, v0]) -
Эквивалентна
reducedim(op, map(f, A), region, f(v0)), но обычно быстрее, так как промежуточный массив избегается.julia> a = reshape(collect(1:16), (4,4)) 4×4 Array{Int64,2}: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 julia> mapreducedim(isodd, *, a, 1) 1×4 Array{Bool,2}: false false false false julia> mapreducedim(isodd, |, a, 1, true) 1×4 Array{Bool,2}: true true true true
-
mapslices(f, A, dims) -
Преобразуйте заданные размеры массива
Aс помощью функцииf.fвызывается для каждого слайсаAвидаA[...,:,...,:,...].dims— целочисленный вектор, определяющий, где в этом выражении стоят двоеточия. Результаты конкатенируются по оставшимся измерениям. Например, еслиdims—[1,2]иA— четырёхмерный,fвызывается дляA[:,:,i,j]для всехiиj.julia> a = reshape(collect(1:16),(2,2,2,2)) 2×2×2×2 Array{Int64,4}: [:, :, 1, 1] = 1 3 2 4 [:, :, 2, 1] = 5 7 6 8 [:, :, 1, 2] = 9 11 10 12 [:, :, 2, 2] = 13 15 14 16 julia> mapslices(sum, a, [1,2]) 1×1×2×2 Array{Int64,4}: [:, :, 1, 1] = 10 [:, :, 2, 1] = 26 [:, :, 1, 2] = 42 [:, :, 2, 2] = 58
-
sum_kbn(A) -
Возвращает сумму всех элементов массива, используя алгоритм компенсированной суммирования Кахана-Бабушки-Неймана для повышения точности.
Комбинаторика
-
randperm([rng, ]n) -
Создаёт случайную перестановку длины
n. Опциональный аргументrngзадаёт генератор случайных чисел (см. Случайные числа). Для случайной перестановки произвольного вектора, см.shuffle()илиshuffle!().
-
invperm(v) -
Возвращает обратную перестановку
v
-
isperm(v) → Bool -
Возвращает
trueеслиvявляется действительной перестановкой.
-
permute!(v, p) -
Переставляет вектор
vна месте, в соответствии с перестановкойp. Проверка, чтоpявляется перестановкой, не выполняется.Для возвращения новой перестановки используйте
v[p]. Обратите внимание, что это, как правило, быстрее, чемpermute!(v,p)для больших векторов.
-
ipermute!(v, p) -
Аналогично
permute!, но применяется обратная перестановка.
-
randcycle([rng, ]n) -
Создаёт случайную циклическую перестановку длины
n. Опциональный аргументrngзадаёт генератор случайных чисел, см. Случайные числа.
-
shuffle([rng, ]v) -
Возвращает случайную перестановку копии
v. Опциональный аргументrngзадаёт генератор случайных чисел (см. Случайные числа). Для перестановкиvна месте, см.shuffle!(). Для получения случайно переставленных индексов, см.randperm().
-
shuffle!([rng, ]v) -
Функция на месте, аналогичная
shuffle(): случайная перестановка массиваvна месте, с опциональным указанием генератора случайных чиселrng.
-
reverse(v[, start=1[, stop=length(v)]]) -
Возвращает копию
v, перевернутую с начала до конца.
-
reverseind(v, i) -
Для данного индекса
iвreverse(v), возвращает соответствующий индекс вv, так чтоv[reverseind(v,i)] == reverse(v)[i]. (Это может быть нетривиально в случае, еслиvявляется строкой Юникода.)
-
reverse!(v[, start=1[, stop=length(v)]]) → v -
Функция на месте, аналогичная
reverse().
Битовые массивы
Битовые массивы — это экономичные «упакованные» булевы массивы, которые хранят один бит на булевое значение. Они могут использоваться аналогично массивам Array{Bool} (которые хранят один байт на булевое значение), и могут быть преобразованы друг в друга с помощью Array(bitarray) и BitArray(array) соответственно.
-
flipbits!(B::BitArray{N}) → BitArray{N} -
Выполняет побитовое отрицание
B. См. Оператор ~.julia> A = trues(2,2) 2×2 BitArray{2}: true true true true julia> flipbits!(A) 2×2 BitArray{2}: false false false false
-
rol!(dest::BitVector, src::BitVector, i::Integer) → BitVector -
Выполняет операцию циклического сдвига влево
srcи помещает результат вdest.iопределяет, на сколько позиций сдвигать биты.
-
rol!(B::BitVector, i::Integer) → BitVector -
Выполняет операцию циклического сдвига влево на месте для
B.iопределяет, на сколько позиций сдвигать биты.
-
rol(B::BitVector, i::Integer) → BitVector -
Выполняет операцию циклического сдвига влево, возвращая новый
BitVector.iопределяет, на сколько позиций сдвигать биты. См. такжеrol!().julia> A = BitArray([true, true, false, false, true]) 5-element BitArray{1}: true true false false true julia> rol(A,1) 5-element BitArray{1}: true false false true true julia> rol(A,2) 5-element BitArray{1}: false false true true true julia> rol(A,5) 5-element BitArray{1}: true true false false true
-
ror!(dest::BitVector, src::BitVector, i::Integer) → BitVector -
Выполняет операцию циклического сдвига вправо
srcи помещает результат вdest.iопределяет, на сколько позиций сдвигать биты.
-
ror!(B::BitVector, i::Integer) → BitVector -
Выполняет операцию циклического сдвига вправо на месте для
B.iопределяет, на сколько позиций сдвигать биты.
-
ror(B::BitVector, i::Integer) → BitVector -
Выполняет операцию циклического сдвига вправо для
B, возвращая новыйBitVector.iопределяет, на сколько позиций сдвигать биты. См. такжеror!().julia> A = BitArray([true, true, false, false, true]) 5-element BitArray{1}: true true false false true julia> ror(A,1) 5-element BitArray{1}: true true true false false julia> ror(A,2) 5-element BitArray{1}: false true true true false julia> ror(A,5) 5-element BitArray{1}: true true false false true
Разряженные векторы и матрицы
Разряженные векторы и матрицы в значительной степени поддерживают тот же набор операций, что и их плотные аналоги. Следующие функции специфичны для разряженных массивов.
-
sparse(I, J, V[, m, n, combine]) -
Создаёт разряжённую матрицу
Sс размерамиm x n, такая чтоS[I[k], J[k]] = V[k]. Функцияcombineиспользуется для объединения дубликатов. Еслиmиnне указаны, они устанавливаются вmaximum(I)иmaximum(J)соответственно. Если функцияcombineне предоставлена,combineпо умолчанию устанавливается в+, если элементыVне являются булевыми, в противном случаеcombineпо умолчанию устанавливается в|. Все элементыIдолжны удовлетворять1 <= I[k] <= m, а все элементыJдолжны удовлетворять1 <= J[k] <= n. Числовые нули в (I,J,V) сохраняются как структурные ненулевые элементы; для удаления числовых нулей используйтеdropzeros!().Дополнительная документация и примеры см. в
Base.SparseArrays.sparse!.
-
sparsevec(I, V[, m, combine]) -
Создаёт разряженный вектор
Sдлиныm, такой чтоS[I[k]] = V[k]. Дубликаты объединяются с помощью функцииcombine, которая по умолчанию устанавливается в+, если аргументcombineне указан, если элементыVне являются булевыми, в противном случаеcombineпо умолчанию устанавливается в|.
-
sparsevec(D::Dict[, m]) -
Создаёт разряженный вектор длины
m, где ненулевые индексы являются ключами из словаря, а ненулевые значения — значениями из словаря.
-
issparse(S) -
Возвращает
trueеслиSразряженный, иfalseв противном случае.
-
sparse(A) -
Преобразует AbstractMatrix
Aв разряжённую матрицу.
-
sparsevec(A) -
Преобразует вектор
Aв разряженный вектор длиныm.
-
full(S) -
Преобразует разряжённую матрицу или вектор
Sв плотную матрицу или вектор.
-
nnz(A) -
Возвращает количество хранимых (заполненных) элементов в разряжённом массиве.
-
spzeros([type, ]m[, n]) -
Создаёт разряженный вектор длины
mили разряжённую матрицу размераm x n. Этот разряженный массив не будет содержать ненулевых значений. Во время создания не будет выделено памяти для ненулевых значений. Тип по умолчанию —Float64если не указан.
-
spones(S) -
Создаёт разряжённый массив с той же структурой, что и у
S, но с каждым ненулевым элементом, имеющим значение1.0.julia> A = sparse([1,2,3,4],[2,4,3,1],[5.,4.,3.,2.]) 4×4 sparse matrix with 4 Float64 nonzero entries: [4, 1] = 2.0 [1, 2] = 5.0 [3, 3] = 3.0 [2, 4] = 4.0 julia> spones(A) 4×4 sparse matrix with 4 Float64 nonzero entries: [4, 1] = 1.0 [1, 2] = 1.0 [3, 3] = 1.0 [2, 4] = 1.0Обратите внимание на различие от
speye().
-
speye([type, ]m[, n]) -
Создаёт разряжённую единичную матрицу размера
m x m. При указанииn, создаёт разряжённую единичную матрицу размераm x n. Тип по умолчанию —Float64если не указан.
-
speye(S) -
Создаёт разряжённую единичную матрицу с размерами, равными
S.julia> A = sparse([1,2,3,4],[2,4,3,1],[5.,4.,3.,2.]) 4×4 sparse matrix with 4 Float64 nonzero entries: [4, 1] = 2.0 [1, 2] = 5.0 [3, 3] = 3.0 [2, 4] = 4.0 julia> speye(A) 4×4 sparse matrix with 4 Float64 nonzero entries: [1, 1] = 1.0 [2, 2] = 1.0 [3, 3] = 1.0 [4, 4] = 1.0Обратите внимание на различие от
spones().
-
spdiagm(B, d[, m, n]) -
Построение разреженной диагональной матрицы.
B— кортеж векторов, содержащих диагонали, иd— кортеж, содержащий позиции диагоналей. В случае, если вход содержит только одну диагональ,Bможет быть вектором (вместо кортежа), аd— позицией диагонали (вместо кортежа), по умолчанию равной 0 (диагональ). Дополнительно,mиnзадают размер получаемой разреженной матрицы.julia> spdiagm(([1,2,3,4],[4,3,2,1]),(-1,1)) 5×5 sparse matrix with 8 Int64 nonzero entries: [2, 1] = 1 [1, 2] = 4 [3, 2] = 2 [2, 3] = 3 [4, 3] = 3 [3, 4] = 2 [5, 4] = 4 [4, 5] = 1
-
sprand([rng, ][type, ]m, [n, ]p::AbstractFloat[, rfn]) -
Создание случайного вектора заданной длины
mили разреженной матрицы размераmнаn, в которой вероятность любого элемента быть ненулевым независимо задаётся величинойp(и, следовательно, средняя плотность ненулевых элементов также равнаp). Не нулевые значения выбираются из распределения, заданногоrfnи имеют типtype. Используется равномерное распределение, еслиrfnне задано. Необязательный аргументrngопределяет генератор случайных чисел, см. Случайные числа.
-
sprandn([rng, ]m, [n, ]p::AbstractFloat) -
Создание случайного разреженного вектора длины
mили разреженной матрицы размераmнаnсо заданной (независимой) вероятностьюpлюбого элемента быть ненулевым, где ненулевые значения выбираются из нормального распределения. Необязательный аргументrngопределяет генератор случайных чисел, см. Случайные числа.
-
nonzeros(A) -
Возвращает вектор структурных ненулевых значений в разреженной матрице
A. Это включает в себя явные нули, хранящиеся в разреженной матрице. Возвращаемый вектор ссылается напрямую на внутреннее хранилище ненулевых элементовA, и любые изменения в возвращаемом векторе также изменятA. См.rowvals()иnzrange().
-
rowvals(A::SparseMatrixCSC) -
Возвращает вектор индексов строк матрицы
A. Любые изменения в возвращаемом векторе также изменятA. Доступ к тому, как хранятся индексы строк, может быть полезен в сочетании с итерацией по структурно ненулевым значениям. См. такжеnonzeros()иnzrange().
-
nzrange(A::SparseMatrixCSC, col) -
Возвращает диапазон индексов ненулевых значений столбца разреженной матрицы. В сочетании с
nonzeros()иrowvals()это позволяет удобно перебирать разреженную матрицу:A = sparse(I,J,V) rows = rowvals(A) vals = nonzeros(A) m, n = size(A) for i = 1:n for j in nzrange(A, i) row = rows[j] val = vals[j] # perform sparse wizardry... end end
-
dropzeros!(A::SparseMatrixCSC, trim::Bool = true) -
Удаляет сохранённые числовые нули из
A, необязательно обрезая лишнее пространство изA.rowvalиA.nzvalприtrimравноtrue.Для внеполосной версии см.
dropzeros(). Для алгоритмической информации см.Base.SparseArrays.fkeep!().
-
dropzeros(A::SparseMatrixCSC, trim::Bool = true) -
Создаёт копию
Aи удаляет сохранённые числовые нули из этой копии, необязательно обрезая лишнее пространство из массивовrowvalиnzvalприtrimравноtrue.Для ин-плой версии и алгоритмической информации см.
dropzeros!().
-
dropzeros!(x::SparseVector, trim::Bool = true) -
Удаляет сохранённые числовые нули из
x, необязательно обрезая лишнее пространство изx.nzindиx.nzvalприtrimравноtrue.Для внеполосной версии см.
Base.SparseArrays.dropzeros(). Для алгоритмической информации см.Base.SparseArrays.fkeep!().
-
dropzeros(x::SparseVector, trim::Bool = true) -
Создаёт копию
xи удаляет числовые нули из этой копии, необязательно обрезая лишнее пространство из массивовnzindиnzvalприtrimравноtrue.Для ин-плой версии и алгоритмической информации см.
Base.SparseArrays.dropzeros!().
-
permute{Tv,Ti,Tp<:Integer,Tq<:Integer}(A::SparseMatrixCSC{Tv,Ti}, p::AbstractVector{Tp}, -
q::AbstractVector{Tq})() -
Взаимно переставляет
A, возвращаяPAQ(A[p,q]). Длина перестановки столбцовqдолжна соответствовать количеству столбцовA(length(q) == A.n). Длина перестановки строкpдолжна соответствовать количеству строкA(length(p) == A.m).Для опытных пользователей и дополнительной информации см.
Base.SparseArrays.permute!().
-
permute!{Tv,Ti,Tp<:Integer,Tq<:Integer}(X::SparseMatrixCSC{Tv,Ti}, A::SparseMatrixCSC{Tv,Ti}, -
p::AbstractVector{Tp}, q::AbstractVector{Tq}[, C::SparseMatrixCSC{Tv,Ti}]) -
Взаимно переставляет
A, сохраняя результатPAQ(A[p,q]) вX. Сохраняет промежуточный результат(AQ)^T(transpose(A[:,q])) в необязательном аргументеCпри его наличии. Требуется, чтобы ниX, ниA, и, если присутствует, ниCне являлись алиасами друг друга; для сохранения результатаPAQобратно вA, используйте следующий метод безX:permute!{Tv,Ti,Tp<:Integer,Tq<:Integer}(A::SparseMatrixCSC{Tv,Ti}, p::AbstractVector{Tp}, q::AbstractVector{Tq}[, C::SparseMatrixCSC{Tv,Ti}[, workcolptr::Vector{Ti}]])Размеры
Xдолжны соответствовать размерамA(X.m == A.mиX.n == A.n).Xдолжен иметь достаточно памяти для всех выделенных элементов вA(length(X.rowval) >= nnz(A)иlength(X.nzval) >= nnz(A)). Длина перестановки столбцовqдолжна соответствовать количеству столбцовA(length(q) == A.n). Длина перестановки строкpдолжна соответствовать количеству строкA(length(p) == A.m).Размеры
Cдолжны соответствовать размерамtranspose(A)(C.m == A.nиC.n == A.m).Cдолжен иметь достаточно памяти для всех выделенных элементов вA(length(C.rowval)>= nnz(A)``and``length(C.nzval) >= nnz(A)`).Для дополнительной (алгоритмической) информации и для версий этих методов, которые отказываются от проверки аргументов, см. (неэкспортированные) родительские методы
Base.SparseArrays.unchecked_noalias_permute!()иBase.SparseArrays.unchecked_aliasing_permute!().См. также:
Base.SparseArrays.permute()
© 2009–2016 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/release-0.5/stdlib/arrays/