AEinstein
AEinstein

Reputation: 153

Generating a new array based on certain criterion in Python

I have an array X and a list T2. I want to create a new array Xnew such that elements of X are placed according to locations specified in T2. I present the current and expected outputs.

import numpy as np

X=np.array([4.15887486e+02, 3.52446375e+02, 2.81627790e+02, 1.33584716e+02,
       6.32045703e+01, 2.07514659e+02, 1.00000000e-24])

T2=[0, 3, 5, 8, 9, 10, 11]


def make_array(indices, values):
    rtrn = np.zeros(np.max(indices) + 1, dtype=values.dtype)
    rtrn[indices] = values
    return 

Xnew = np.array([make_array(Ti, Xi) for Ti, Xi in zip([T2], X)], dtype=object)
print("New X =",[Xnew])

The current output is

New X = [array([None], dtype=object)]

The expected output is

[array([[4.15887486e+02, 0.0, 0.0, 3.52446375e+02, 0.0,
        2.81627790e+02, 0.0, 0.0, 1.33584716e+02,
        6.32045703e+01, 2.07514659e+02, 1.00000000e-24]],
      dtype=object)]

Upvotes: 0

Views: 44

Answers (1)

cheersmate
cheersmate

Reputation: 2666

You basically have what you need, but you are calling your function in a very weird way.

The function works with numpy arrays / lists as input, you don't need to put in individual elements.

X = np.arange(5)
ind = np.asarray([1, 4, 3, 2, 10])

def make_array(indices, values):
    rtrn = np.zeros(np.max(indices) + 1, dtype=values.dtype)
    rtrn[indices] = values
    return rtrn

make_array(ind, X)  # array([0, 0, 3, 2, 1, 0, 0, 0, 0, 0, 4])

Upvotes: 1

Related Questions