julia

Julia: Construct an array from an index array and an array to choose from (or: What is the Julia equivalent of np.choose in numpy?)


In Python (Numpy) there is a np.choose function, that constructs an array from an index array and a list of arrays to choose from.

Simple example (and I am actually mostly interested in this simple version of the problem with a 1D choice-array):

import numpy as np
idx_arr = np.array([0, 1, 2, 1, 3])
choices = np.array([0, 10, 20, 30])
new_arr = np.choose(idx_arr, choices)  # array([ 0, 10, 20, 10, 30])

For the example above the same result can be created in Julia using a for-loop using list comprehension

idx_arr = [1, 2, 3, 2, 4];
choices = [0, 10, 20, 30];
new_arr = [choices[idx_arr[i]] for i in 1:length(idx_arr)];

Is there a Julia equivalent for np.choose or any other way to achieve this that does not require looping over the index array?


Solution

  • choices[idx_arr] will work (note that indices are 1-based not 0-based).

    The example in the question:

    julia> idx_arr = [1, 2, 3, 2, 4];
    
    julia> choices = [0, 10, 20, 30];
    
    julia> new_arr = [choices[idx_arr[i]] for i in 1:length(idx_arr)]
    5-element Vector{Int64}:
      0
     10
     20
     10
     30
    
    julia> choices[idx_arr]
    5-element Vector{Int64}:
      0
     10
     20
     10
     30