Size: a a a

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

2020 January 17

АО

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

АО

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

АО

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

В общем, если это вычисление внутри функции написать, то проблем не будет.
Или в let блок завернуть.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Viktor Maslov
А вот такой for как на Julia переписать?
for i = -2:2,
   j = -3:3
   println("$(i), $(j)")
end


не надо цикл в цикле дублировать
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
`
n = 1
l = 0
for i = -n:n
for j= -n:n
for k = -n:n
l = l+1
V(l, :) = [I j k]
end
end
end
print(V)
источник

RS

Roman Samarev 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)
Здесь можно мелочь добавить -
A = [rand(1:1000, n) rand(1:1000, n) rand(1:1000, n)]

# это то же, что и:

rand(1:1000, n, 3)
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
V = [ ]
n = 1
for i = -n:n
for j= -n:n
for k = -n:n
push!(V, [I j k])
end
end
end
print(V)
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
но это мегадолго, если что )
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
ну не мега конечно, но динамически push! делать не очень хорошо
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
да, только это пример, а там что-то другое далее будет
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
про fill многомерный написал, но это не тот случай
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
v = [ [i, j, k] for i = -n:n, j = -n:n, k = -n:n ]
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
ну не мега конечно, но динамически push! делать не очень хорошо
Я тоже так думал, но есть один нюанс (хотя не проверял, только читал на форуме). Push! долго работает за счёт аллокаций, которые он создаёт. Если память уже зарезервирована, то push будет отрабатывать быстро. А чтобы зарезервировать память, можно пользоваться командой sizehint.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
да, sizehint можно по идее
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Roman Samarev
Здесь можно мелочь добавить -
A = [rand(1:1000, n) rand(1:1000, n) rand(1:1000, n)]

# это то же, что и:

rand(1:1000, n, 3)
Спасибо, логично да.
источник

RS

Roman Samarev 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)


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

B[j] = A[i]
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
а вот заменить 3 условия векторной операцией мне не удалось. Время с микросекунд растёт до миллисекунд
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Roman Samarev
v = [ [i, j, k] for i = -n:n, j = -n:n, k = -n:n ]
for i = -2:2,
   j = -3:3
   println("$(i), $(j)")
end


на всякий случай, если кто не знает про возможность отбросить вложенные for
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Roman Samarev
for i = -2:2,
   j = -3:3
   println("$(i), $(j)")
end


на всякий случай, если кто не знает про возможность отбросить вложенные for
👍
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Roman Samarev
for i = -2:2,
   j = -3:3
   println("$(i), $(j)")
end


на всякий случай, если кто не знает про возможность отбросить вложенные for
Да, это крутая штука. Мне в своё время пригодилась, когда мне нужен был глобальный break из вложенных циклов.
источник