Как мне найти numpy.amax из второго списка многомерного списка? - PullRequest
1 голос
/ 15 мая 2019

У меня есть 'n' ряд списков, которые я отправляю в процедуру построения. Вторым элементом в каждом списке являются частотные контрольные точки для использования при построении оси x. Мне нужно пройти каждую серию 'n' и выяснить, что является абсолютной точкой прерывания по самой низкой частоте, а wat является абсолютной точкой прерывания по самой высокой частоте для установления границы моей оси X на графике.

Каждый список состоит из произвольного количества списков: ['описание датчика', [контрольные точки частоты], [амплитуды в этих контрольных точках]] т.е.: [['sensor_A', [0.1,1.0,10.0], [1.5,15.0,150.0]], ['sensor_B', [0,05,1.0,20.0], [0,5,15.0,300.0]]]

Я думал, что мог бы сделать это напрямую с numpy.amax и numpy.amin, но не нашел правильную комбинацию ... Должен ли я перебирать весь список по одному элементу за раз, или я могу использовать [ :] чтобы получить функции amax, amin для меня?

Не нашли лучшего решения, но, похоже, есть более быстрый путь.

pc = [['sensor_A',[0.05,1.0,10.0],[1.5,15.0,150.0]],['sensor_B',[0.2,1.0,20.0],[0.5,15.0,300.0]]]
# I want the nmax of the second list from each of the lists, which should be 20
# I want the nmin of the second list from each of the lists, which should be 0.05
print(np.amax(pc[1][1])) # unfortunately this only looks at the second list 
print(np.amin(pc[1][1])) # and ignores the first.

max=0       # This works but seems kind of clunky. Is there a shorter solution?
min=1.0E+6
for p in pc:
    if (np.amax(p[1]) > max):
        max = np.amax(p[1])
    if (np.amin(p[1]) < min):
        min = np.amin(p[1])
print( min,max )

1 Ответ

1 голос
/ 16 мая 2019

Я не думаю, что вы можете использовать numpy для этого, поскольку ваш входной список не является массивом-пустышкой. Вам придется использовать встроенные функции min и max.

pc = [['sensor_A',[0.05,1.0,10.0],[1.5,15.0,150.0]],['sensor_B',[0.2,1.0,20.0],[0.5,15.0,300.0]]]

# the builtin max function can accept a key to use when determining the max.
# Since you want the max from the 2nd list in each element in pc, we can use
max_item = max(pc, key = lambda i: max(i[1]))

# The lambda creates an anonymous function that takes in one argument, i,
# which is each outer list in pc and then uses the maximum of the 2nd element 
# (which is your freq breakpoints) to determine the final maximum. The output
# will be an outer-list from pc.

print(max_item)
# outputs: >> ['sensor_B', [0.2, 1.0, 20.0], [0.5, 15.0, 300.0]]
# We get the right output, we know 20 is the max freq breakpoint from our eyes...

# Now we have the element in pc that has the max freq breakpoint, pull out the max
xmax = max(max_item[1])
# max_item[1] is the list of freq breakpoints, and we just take the max from that.

# It can be confusing with so many max's, so let's put it all together on one line.
xmax_oneline = max(max(pc, key = lambda i: max(i[1]))[1])
print(xmax_oneline)
# Outputs: >> 20.0 as desired.

# We can do similar to find the minimum
xmin_oneline = min(min(pc, key = lambda i: min(i[1]))[1])
print(xmin_oneline)
# Outputs: >> 0.05 as desired.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...