Что Джулия эквивалентна функции Numpy's where? - PullRequest
2 голосов
/ 14 мая 2019

В python, where в numpy выбирает элементы в массиве на основе заданного условия.

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(a < 5, a, 10*a)
array([ 0,  1,  2,  3,  4, 50, 60, 70, 80, 90])

А как насчет Джулии?filter будет использоваться в качестве элементов выбора, но он удаляет другие элементы, если выражение if не используется.Однако я не хочу использовать if.

Нужно ли мне писать более сложные функции для filter (без if) или любых других альтернатив?

РЕДАКТИРОВАТЬ : Я нашел решение, но если у кого-то есть идея лучше, пожалуйста, ответьте на этот вопрос.

julia > a = collect(1:10)
10-element Array{Int64,1}:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10

julia> cond = a .< 5
10-element BitArray{1}:
  true
  true
  true
  true
 false
 false
 false
 false
 false
 false

julia> Int.(cond) .* a + Int.(.!cond) .* (10 .* a)
10-element Array{Int64,1}:
   1
   2
   3
   4
  50
  60
  70
  80
  90
 100

1 Ответ

5 голосов
/ 14 мая 2019

Существует несколько способов, наиболее очевидным является вещание ifelse, например:

julia> a = 0:9  # don't use collect
0:9

julia> ifelse.(a .< 5, a, 10 .* a)
10-element Array{Int64,1}:
  0
  1
  2
  3
  4
 50
 60
 70
 80
 90

Вы также можете использовать макрос @., чтобы убедиться, что вы правильно поняли точки:

@. ifelse(a < 5, a, 10a)

или используйте понимание

[ifelse(x<5, x, 10x) for x in a]

Конечно, вы также можете использовать цикл.

...