Size: a a a

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

2020 January 17

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Ещё кстати можно пробовать для скорости пробовать заменять точки на static array
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Сколько обсуждений вызвала моря маленькая задачка
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Андрей Оськин
A[.!(
   (-a .< A[:, 1] .< a) .|
   (-b .< A[:, 2] .< b) .|
   (-c .< A[:, 3] .< c)
), :]
аккуратнее с такими операциями. Это же пересечение 3-х списков с размерностью массива. И 3 отдельных цикла проверки
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Вообще fusion должен работать.
источник

RS

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

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Зуб не дам 😊 Но обещали ещё в 0.6 версии.
Это была одна из киллер фич нового броадкастинга.
источник

RS

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

АО

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

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
function f1(A, a, b, c)
   A[.!(
       (-a .< A[:, 1] .< a) .|
       (-b .< A[:, 2] .< b) .|
       (-c .< A[:, 3] .< c)
   ), :]
end

function f2(A, a, b, c)
   n = size(A)[1]
   filt = BitArray(undef, n)
   for i in 1:n
       filt[i] = !((-a < A[i, 1] < a) | (-b < A[i, 2] < b) | (-c < A[i, 3] < c))
   end
   A[filt, :]
end

n = 100
A = [rand(1:1000, n) rand(1:1000, n) rand(1:1000, n)]

a, b, c = 10, 20, 30

# Sanity check
all(f2(A, a, b, c) .== f1(A, a, b, c)) # true

@btime f1($A, $a, $b, $c) # 6.206 μs (27 allocations: 31.03 KiB)
@btime f2($A, $a, $b, $c) # 1.500 μs (6 allocations: 2.53 KiB)
источник

АО

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

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Зато писать легче 😊 Premature Optimization - это зло 😊
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Можно ещё посмотреть queryverse
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Можно ещё вот так ^_^

function f3(A, a, b, c)
   n = size(A)[1]
   B = similar(A)
   j = 1
   for i in 1:n
       if !((-a < A[i, 1] < a) | (-b < A[i, 2] < b) | (-c < A[i, 3] < c))
           B[j, 1] = A[i, 1]
           B[j, 2] = A[i, 2]
           B[j, 3] = A[i, 3]
           j += 1
       end
   end
   @views B[1:j - 1, :]
end

@btime f3($A, $a, $b, $c) # 592.569 ns (2 allocations: 2.56 KiB)


Нет предела совершенству 😊 Поэтому лучше оптимизировать только то, что нужно оптимизировать.
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Андрей Оськин
Можно ещё вот так ^_^

function f3(A, a, b, c)
   n = size(A)[1]
   B = similar(A)
   j = 1
   for i in 1:n
       if !((-a < A[i, 1] < a) | (-b < A[i, 2] < b) | (-c < A[i, 3] < c))
           B[j, 1] = A[i, 1]
           B[j, 2] = A[i, 2]
           B[j, 3] = A[i, 3]
           j += 1
       end
   end
   @views B[1:j - 1, :]
end

@btime f3($A, $a, $b, $c) # 592.569 ns (2 allocations: 2.56 KiB)


Нет предела совершенству 😊 Поэтому лучше оптимизировать только то, что нужно оптимизировать.
😂
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
@inbounds if !((-a < A[i, 1] < a) | (-b < A[i, 2] < b) | (-c < A[i, 3] < c))

срезает ещё процентов 15 от времени.
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
А вот такой for как на Julia переписать?
источник

SV

Sergey Volkov in Язык программирования Julia / Julia programming language
Viktor Maslov
А вот такой for как на Julia переписать?
можно так и переписать
источник

VM

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

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
А воот и нет
источник

АО

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