#python #arrays #numpy
#python #массивы #numpy
Вопрос:
Я совсем новичок в Python и Numpy. Может кто-нибудь помочь мне понять, как я могу решить проблему, которую здесь раскрывают? У меня есть следующий 2D-массив (arr) с NANS и числами, здесь ниже:
arr = np.array([[np.nan, 2.3, np.nan, np.nan, np.nan, 6.4, np.nan],
[np.nan, np.nan, 3.1, 3.4, np.nan, np.nan, 3.9]])
Мне нужно получить новый массив (результат) с первыми вхождениями no-NaN второй строки в arr, дополненными первыми вхождениями no-NaN первой строки в arr; остальные все NAN. Ниже приведен результат:
result = np.array([np.nan, np.nan, 3.1, np.nan, np.nan, np.nan, 3.9])
Заранее большое спасибо.
Комментарии:
1. Извините, ваш вопрос неясен. Что вы подразумеваете под условным?
Ответ №1:
Каждое первое вхождение числа во втором массиве после появления num в первом массиве-
import numpy as np
#arr = np.array([[np.nan, 2.3, np.nan, np.nan, np.nan, 6.4, np.nan],
# [np.nan, np.nan, 3.1, 3.4, np.nan, np.nan, 3.9]])
arr = np.array([[np.nan, 2.3, np.nan, np.nan, np.nan, 6.4, np.nan],
[3, np.nan, np.nan, 3.1, 3.4, np.nan, np.nan]])
result = np.full_like(arr[1, :], np.nan)
arr1pos = np.squeeze(np.argwhere(np.isfinite(arr[0, :])))
arr2pos = np.squeeze(np.argwhere(np.isfinite(arr[1, :])))
first_occurrence_idxs = np.searchsorted(arr2pos, arr1pos)
if first_occurrence_idxs[-1] == arr2pos.size:
result[arr2pos[first_occurrence_idxs[:-1]]] = arr[1, :][arr2pos[first_occurrence_idxs[:-1]]]
else:
result[arr2pos[first_occurrence_idxs]] = arr[1, :][arr2pos[first_occurrence_idxs]]
print(result)
[nan nan nan 3.1 nan nan nan]
Комментарии:
1. Спасибо за быстрое воспроизведение. Код работает только в случае отсутствия смежных значений NaNs, но не в том случае, если в середине есть другие значения: вот ниже пример, где это не работает: arr = np.array([[np.nan, 2.3, np.nan, np.nan, np.nan, 6.4,np.nan], [3, np.nan, np.nan, 3.1, 3.4, np.nan, np.nan]])
2. Извините, теперь даже я в замешательстве. Не могли бы вы лучше объяснить свою проблему и обновить вопрос? Я был бы рад помочь
3. Мне нужны первые вхождения числа в моем 2-м массиве на основе вхождений числа в первом массиве. В частности, при первом вхождении первого номера массива в 1-м массиве происходит первое вхождение первого номера во 2-м массиве. Повторите шаг до конца массивов. Принять во внимание, что оба массива являются числами и np.nans случайным образом. Большое спасибо за поддержку.
4. Похоже, вы хотите, чтобы числа во 2-м массиве были выровнены с числом вхождений в первом массиве, я прав?
5. Отличная работа! Это работает правильно. Большое спасибо