【问题标题】:What is Julia equivalent of numpy's where function?什么是 Julia 相当于 numpy 的 where 函数?
【发布时间】:2019-10-01 21:10:20
【问题描述】:

在 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])

在 Julia 中呢? 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

【问题讨论】:

    标签: julia


    【解决方案1】:

    有几种方式,最明显的就是这样广播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]
    

    你当然也可以使用循环。

    【讨论】:

    • ifelse 是我想要的。谢谢!
    • 另一种使用理解的方法是使用三元运算符 [x
    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2021-02-02
    • 2010-12-15
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多