Как заменить определенные значения массива, соответствующие условию, списком чисел

#python #arrays #numpy

Вопрос:

У меня есть массив 4×4 numpy (dtype = объект), и я хотел бы заменить везде, где есть 0, списком из 1-4. Я могу заменить 0 на набор из 1-4, как показано ниже, но не список, есть идеи, почему и как это преодолеть?

 def replace_zeroes(arr):
    fullSet = {1, 2, 3, 4}
    lst = [1,2,3,4]
    arr_c = arr.copy()
    arr_c = arr_c.astype('object')
    np.place(arr_c, arr_c==0, fullSet)

    return arr_c 

Прилагаются выходные данные, сначала показано, что он успешно работает с набором, но я не уверен, что он делает со списком?

Кроме того, поможет ли np.argwhere(arr_c==0) каким-либо образом, получив индексы, а затем заменив их списком? Хотя не совсем уверен, как им пользоваться.

[Как видно ниже, он работает с набором

Он не работает со списком

Редактировать, исходный массив является:

 arr = [[1,2,4,0],
       [1,3,1,5],
       [0,3,5,3],
       [1,0,1,0]]
       
arr = np.array(arr) 

Ожидаемый результат вместо набора с 1,2,3,4, я хотел бы получить список [1,2,3,4], где бы ни находились 0.

Комментарии:

1. Не могли бы вы поделиться исходным массивом и каков ваш ожидаемый результат?

2. Привет, только что добавил исходный массив, спасибо.

3. та же проблема есть arr_c[ arr_c == 0 ] = lst , но работает arr_c[ arr_c == 0 ] = fullSet

4. Я мог бы сделать это только в pandas.DataFrame df = df.applymap(lambda x: (lst if x == 0 else x))

5. потому что там ноль, так что я мог бы использовать or df = df.applymap(lambda x: (x or lst))