#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))