Size: a a a

Язык программирования Julia / Julia programming language

2021 July 02

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
push!(x, ...)
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Точнее есть два варианта.
Либо можно создать вектор нулевой длины и пихать в него элементы, или можно создать вектор заданной длины и тогда просто x[j] = элемент
источник

IY

Igor Yegin in Язык программирования Julia / Julia programming language
А как пихать в вектор нулевой длины?
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
push!
источник

IY

Igor Yegin in Язык программирования Julia / Julia programming language
А, это и было оно самое? Понял, спасибо.

А то в R с помощью индексов можно растягивать нулевой вектор, вот я и запутался
источник

A

A in Язык программирования Julia / Julia programming language
Thanks
источник

A

Andrey in Язык программирования Julia / Julia programming language
Не растягивать, а на каждой итерации цикла создавать новый, получая в итоге чудовищно низкую производительность. Думаю, и в Джулии лучше сразу создавать вектор нужного размера.
источник

A

Atell in Язык программирования Julia / Julia programming language
а кто-то знает, как работают строки внутри жулии? только что была замечена интересная особенность:
julia> sizeof("שש")
4

julia> sizeof("ששש")
6

julia> sizeof("שששh")
7

мне думалось, там просто массив юникод символов по два байта, а как оказалось символы латиницы добавляют лишь один байт веса и иногда строки чисто однобайтовыми заполняются. как это реализовано?
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Есть там тонкости с индексами
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Хранение с переменной длиной символов. Поэтому, либо надо конвертировать строку в массив символов. Тогда индекс будет естественным. Либо пользоваться https://docs.julialang.org/en/v1/base/strings/#Base.nextind для вычисления границ. Либо пользоваться итераторами поверх строк.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Из строки, в общем случае, нельзя взять символ с произвольным индексом, поскольку индекс может оказаться внутри многобайтового символа
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
+ есть обёртка https://github.com/JuliaString/Strs.jl
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Это utf-8, там один визуальный символ может очень по разному кодироваться. И одним байтом и двумя и четырьмя. И есть ещё всякие модификаторы.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Джулия в этом смысле ничего не изобретает, а просто следует спецификациям
источник

A

Atell in Язык программирования Julia / Julia programming language
а, не знал. всем спасибо за ответ
источник

MV

Mitya Volodin in Язык программирования Julia / Julia programming language
Но лучше так не делать.
источник

MV

Mitya Volodin in Язык программирования Julia / Julia programming language
Хотя, если скорость не важна - можно.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
И ещё, length(str) != sizeof(str)
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
push! в вектор на каждой итерации - далеко не так медленно, как может показаться, причём это верно для многих языков

в среднем одна вставка занимает буквально несколько наносекунд, и конечно никакой массив на каждой итерации не пересоздаётся:

julia> function f(n)
      vec = Int[]
      for i in 1:n
          push!(vec, i)
      end
end

julia> @btime f(1000)
 5.455 μs (10 allocations: 16.39 KiB)

julia> @btime f(1000000)
 5.978 ms (20 allocations: 9.00 MiB)
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
аллокация сразу нужного размера сработает ещё быстрее, тут вопросов нет
источник