Size: a a a

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

2020 November 06

АО

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

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
На самом деле более грамотное решение - это с помощью какого-нибудь reduce написать.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Вот, более человеческий вариант
julia> findall(i -> a[i] > 0 && b[i] > 0, 1:length(a))
3-element Array{Int64,1}:
2
3
4
источник

P

PS in Язык программирования Julia / Julia programming language
Интересно. map(x -> (x[1]>0 && x[2]>0), zip(a,b)) работает. findall не работает 🤷‍♂️
источник

АО

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

АО

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

P

PS in Язык программирования Julia / Julia programming language
так, а filter почему тогда ломается? Все чудесатее
источник

P

PS in Язык программирования Julia / Julia programming language
zip как генератор не считается коллекцией?
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
help?> zip

Run multiple iterators at the same time, until any of them is exhausted. The value type of the zip iterator is a tuple of values of its
 subiterators.
источник

P

PS in Язык программирования Julia / Julia programming language
спасибо, сижу читаю как раз хелп
источник

P

PS in Язык программирования Julia / Julia programming language
findall(x->(x[1]>0 && x[2]>0), [x for x in zip(a, b)]) jackie.jpg
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
PS
findall(x->(x[1]>0 && x[2]>0), [x for x in zip(a, b)]) jackie.jpg
Тяжелое решение. Как по памяти, так и по процессору
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Андрей Оськин
Вот, более человеческий вариант
julia> findall(i -> a[i] > 0 && b[i] > 0, 1:length(a))
3-element Array{Int64,1}:
2
3
4
Это, вероятно, самое легковесное
источник

P

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

P

PS in Язык программирования Julia / Julia programming language
я уже из спортивного интереса копаю, почему итератор не получается
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Не реализован. Но если есть желание покопать - есть enumerate(), который даст индекс для zip. Есть filter, есть map
источник

P

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

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Ещё вариант - применить фильтр к исходным массивам, получить два массива boolean, пересечь их. Индексы элементов с true и будут тем, что нужно
источник

АО

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

Например, можно сделать так

using OffsetArrays
import Base: keys

a = OffsetVector([1, 2, 3, 4, 0], 0:4)
b = [0,1,2,3,4]
keys(x::typeof(zip(a, b))) = zip(eachindex.(x.is)...)

julia> findall(x -> x[1] > 0 && x[2] > 0, zip(a, b))
3-element Array{Tuple{Int64,Int64},1}:
(1, 2)
(2, 3)
(3, 4)
источник

АО

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