Добавление 2d numpy массива в цикл for - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть следующий код:

import numpy as np 

#make amplitude array
amplitude=[0,1,2,3, 5.5, 6,5,2,2, 4, 2,3,1,6.5,5,7,1,2,2,3,8,4,9,2,3,4,8,4,9,3]

#split arrays up into a line for each sample
traceno=5                  #number of traces in file
samplesno=6                #number of samples in each trace. This wont change.

amplitude_split=np.array(amplitude, dtype=np.double).reshape((traceno,samplesno))

#Create two new arrays full of zeros, which has row=traceno, and column=samplesno. we can append to this later
fastpulse=np.zeros([traceno,samplesno])
slowpulse=np.zeros([traceno,samplesno])

testsamples=samplesno-1

diff_amp = np.diff(amplitude_split) #calculates the difference between each value in array
ave_dif=np.array(np.sum(diff_amp,1)/testsamples).reshape((testsamples,1)) #calculates the average difference for each line/trace
abs_ave_dif=np.absolute(ave_dif).reshape(testsamples,1)


for row in abs_ave_dif:
    for col in row:
        if col<1:
            np.append(fastpulse,row in amplitude_split) 
        else:
            np.append(slowpulse, row in amplitude_split)
            print(fastpulse)

Я пытаюсь получить код для вычисления, является ли каждая строка в моем массиве ampitude_split приблизительно постоянной. Если это так, я хочу добавить строку в массив fastpulse, если нет, я хочу добавить ее в массив slowpulse.

Я использовал операцию np.diff, чтобы вычислить разницу между значениями в каждой строке, и усреднил их. Я использую для l oop для добавления. Т.е. если средняя разница меньше 1, тогда добавьте строку ampitude_split в новый массив. Я думаю, что именно здесь возникает моя проблема.

Мой текущий вывод для fast pulse:

[[0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]]

Мой ожидаемый вывод:

[[5 2 2 4 2 3]
 [1 6 5 7 1 2]
 [2 3 8 4 9 2]
 [3 4 8 4 9 3]]

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете обрабатывать по одной строке за раз, что кажется более удобным. Проверьте, находится ли среднее значение diff в пределах порога или нет. Вы можете установить порог в зависимости от ваших потребностей.

import numpy as np 

#make amplitude array
amplitude=[0,1,2,3, 5.5, 6,5,2,2, 4, 2,3,1,6.5,5,7,1,2,2,3,8,4,9,2,3,4,8,4,9,3]

#split arrays up into a line for each sample
traceno=5                  #number of traces in file
samplesno=6                #number of samples in each trace. This wont change.

amplitude_split=np.array(amplitude, dtype=np.double).reshape((traceno,samplesno))

print(amplitude_split)

fastpulse = []

for row in amplitude_split:
  mean_diff = np.mean(np.diff(row))
  print(mean_diff)
  if mean_diff < 0.5:
    fastpulse.append(row)

print(fastpulse)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...