Как найти наибольшее значение в соответствии с заданными определенными условиями в цикле for?

avatar
Stevan Nixon
1 июля 2021 в 15:48
107
2
0

Мне удалось поместить массивы в цикл for и, в зависимости от условия, выбрать нужные мне значения. Из этих выбранных значений я пытаюсь выбрать наибольшее значение из матрицы a и b. К сожалению, мне почему-то не хватает синтаксиса.

мой код

a=np.array([0, 0, 0, 1, 1, 1, 2, 4,2, 2])
b=np.array([0, 1, 2, 0, 1, 2, 0, 1, 2,5])

max_b=b[0]

for (j), (k) in zip(a,b):
    #print(j,k)
    if j>=2 and k>=1:
        print(j,'a')
        print(k,'b')

вывод:

4 a
1 b
2 a
2 b
2 a
5 b

мне нужно: Из этих чисел мне нужно выбрать наибольшее число из j и k

4 a
5 b

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

maxv=a[0]
for i in a:
    
    if i > maxv:
        maxv=i
print(maxv)

Это моя попытка, но она глупая

a=np.array([0, 0, 0, 1, 1, 1, 2, 4,2, 2])
b=np.array([0, 1, 2, 0, 1, 2, 0, 1, 2,5])

#max_b=b[0]

for (j), (k) in zip(a,b):
    #print(j,k)
    if j>=2 and k>=1:
        #print(j,'a')
       # print(k,'b')
        max_a=j
        max_b=k
        if j > max_a:
            max_a=k
        print(max_a)
    

Можете ли вы посоветовать мне, как это может работать?

Источник
Javier A
1 июля 2021 в 15:53
0

Вы действительно хотите сделать это с помощью цикла?

Stevan Nixon
1 июля 2021 в 15:54
0

А как еще может быть?

Javier A
1 июля 2021 в 15:59
0

Учитывая ваш пример, вы хотите напечатать максимальные значения a и b. Но ваш код, похоже, делает что-то совсем другое.

kjmerf
1 июля 2021 в 16:00
0

Да, разве у numpy нет максимальной функции?

Stevan Nixon
1 июля 2021 в 16:02
0

но мой код печатает значения в соответствии с условием if, а затем из этих чисел, которые соответствуют условию, если я хотел бы напечатать максимальные значения.

Stevan Nixon
1 июля 2021 в 16:03
0

максимальное значение из j и k в моем коде

Javier A
1 июля 2021 в 16:06
0

Вы можете показать пример, где желаемый результат — это не просто максимальное значение каждого вектора.

Gulzar
11 июля 2021 в 10:14
0

Если ответ помог вам, пожалуйста, примите его. Если нет, объясните, почему.

Ответы (2)

avatar
Gulzar
1 июля 2021 в 17:12
1

Правильное решение с использованием цикла for следует ниже.

Вы не обновляли max_b, вообще не сохраняли max_a и не проверяли, меньше ли текущее max_b или max_a текущего значения, чтобы обновить их.

import numpy as np

a = np.array([0, 0, 0, 1, 1, 1, 2, 4, 2, 2])
b = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2, 5])

max_a = a[0]
max_b = b[0]

for j, k in zip(a, b):
    # print(j,k)
    if j >= 2 and k >= 1:
        if max_a < j :
            max_a = j
        if max_b < k:
            max_b = k

print(f"{max_a}, a)")
print(f"{max_b}, b)")
avatar
Gulzar
1 июля 2021 в 16:38
1

Мы можем использовать маскировку numpy, затем .max().

Это решение без циклов, также называемое векторизацией.

import numpy as np

a = np.array([0, 0, 0, 1, 1, 1, 2, 4, 2, 2])
b = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2, 5])

a_gt_2 = a >= 2
b_gt_1 = b >= 1

conditions_apply_mask = a_gt_2 & b_gt_1

a_filtered = a[conditions_apply_mask]
b_filtered = b[conditions_apply_mask]

max_a_filtered = a_filtered.max()
max_b_filtered = b_filtered.max()

print(f"{max_a_filtered}, a")
print(f"{max_b_filtered}, b")