2013-04-01 2 views
1

У меня есть массив NumPy, который хранит информацию о сигнале. В приведенном ниже коде я просто создал его из случайных чисел для удобства. Теперь мне нужно выбрать позиции из массива сигналов, основываясь на критериях. Опять же, я упростил приведенные ниже критерии ради краткости. Я пытаюсь сохранить эти позиции, добавив их в пустой массив NumPy, называемый позициями. Я знаю, что мое использование функции NumPy.append() должно быть неправильным. Я попытался отладить его, но я не могу найти ошибку. Что я делаю не так?добавляемые целые числа для пула массива NumPy в Python

import numpy as np 
import numpy.random as random 

signal = random.randint(1,10000,1000) 

positions = np.array([],dtype = int) 
for i in range(0,len(signal)): 
    if((signal[i] % 3 == 0) or (signal[i] % 5 == 0)): 
     print(i) 
     np.append(positions,i) 

print(positions) 

EDIT:

Я на самом деле это нужно запустить в цикле, так как мой состоянии в случае() представляет собой математическое выражение, которое будет изменено в соответствии с какое-то правило (это было бы сложно скомпоновать здесь), если условие выполнено.

ответ

1

Вам не нужна явная петля для этого:

positions = np.where((signal % 3 == 0) | (signal % 5 == 0))[0] 

Здесь (signal % 3 == 0) | (signal % 5 == 0) оценивает критерий по каждому элементу signal и np.where() возвращает индексы, где критерий является истинным.

Если есть добавляемых к positions в петле, вот один из способов сделать это:

positions = np.hstack((positions, [i])) 
+0

спасибо, что делает [0] в самом конце сделать? – seb

+0

@sebastian: Когда используется таким образом, 'np.where()' возвращает одноэлементный кортеж. '[0]' разворачивает один элемент. – NPE

+0

ahhh ... ok, awesome – seb

Смежные вопросы