Julia与numpy的where函数等效吗?

时间:2019-05-14 19:20:24

标签: julia

在python中,numpy中的where根据给定条件选择数组中的元素。

>>> 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 个答案:

答案 0 :(得分:5)

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

或使用理解力

func addBannerViewToView() {
    bannerView = GADBannerView(adSize: kGADAdSizeBanner)
    bannerView.adUnitID = "ca-app-pub-HIDDEN/HIDDEN"
    bannerView.rootViewController = self
    bannerView.delegate = self
    bannerView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(bannerView)
    view.addConstraints(
        [NSLayoutConstraint(item: bannerView,
                            attribute: .bottom,
                            relatedBy: .equal,
                            toItem: view.safeAreaLayoutGuide.bottomAnchor,
                            attribute: .top,
                            multiplier: 1,
                            constant: 0),
         NSLayoutConstraint(item: bannerView,
                            attribute: .centerX,
                            relatedBy: .equal,
                            toItem: view,
                            attribute: .centerX,
                            multiplier: 1,
                            constant: 0)
        ])
    bannerView.load(GADRequest())
}

您当然也可以使用循环。