Заменить числа ниже порога в массиве numpy нулями - PullRequest
0 голосов
/ 09 июля 2020

У меня есть массив NxT Numpy, в котором я сохранил N временной ряд (случайное блуждание) длиной T. Я пытаюсь заменить все значения данной серии (строки) ниже порога, скажем 8000, нулями. Если значение в t ниже порога, все последующие значения будут равны нулю, независимо от того, поднимется ли случайное блуждание выше порога через некоторое время.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Ваш массив arr. Это то, что вам нужно:

arr[arr<8000] = 0

Или это, если значения увеличиваются после достижения ниже порогового значения:

idx = np.where(arr<8000)
indexer = idx[1][np.insert(np.diff(idx[0]),0,1)==1]
for i in range(arr.shape[0]):
  arr[i,indexer[i]:]=0
0 голосов
/ 09 июля 2020

Думаю, это то, что вы ищете. Я не думаю, что для этого есть векторизованное решение, которое позволяет избежать явного цикла по строкам.

np.random.seed(2)
a = np.random.randint(10, size=(5, 10))
print(f'Original a:\n{a}')
for row in a:
    row[np.argwhere(row <= 2)[0, 0]:] = 0
    
print(f'Modified a:\n{a}')

Вывод:

Original a:
[[8 8 6 2 8 7 2 1 5 4]
 [4 5 7 3 6 4 3 7 6 1]
 [3 5 8 4 6 3 9 2 0 4]
 [2 4 1 7 8 2 9 8 7 1]
 [6 8 5 9 9 9 3 0 0 2]]
Modified a:
[[8 8 6 0 0 0 0 0 0 0]
 [4 5 7 3 6 4 3 7 6 0]
 [3 5 8 4 6 3 9 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [6 8 5 9 9 9 3 0 0 0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...