Как сравнить два массива в python?

#python #arrays #python-3.x #loops

Вопрос:

Предположим, у меня есть два массива

 array1=np.array([1,2,3,4,5,6,7,8,9,10])
array2=np.array([11,1,2,4,10,60,0,3,20,33])
 

Я хочу сравнить два массива и сохранить значения, которые больше. Я хочу написать код, который будет проверять первый элемент array1 с первым элементом array2 и хранить наибольшее значение между ними в новом массиве и так далее.

Я попробовал это с помощью этого кода

 array3=[]
i=0
while i<=len(array1):
    if array1[i]>array2[i]:
        array3.append(i)
 

Однако код не выдает никаких выходных данных и продолжает работать. Два рассматриваемых массива, с которыми я хочу работать, очень большие, поэтому будет ли обычный метод цикла работать и для больших массивов?

Ответ №1:

Если вы используете numpy, то предпочтительнее использовать numpy полностью. Это будет быстрее и потребует меньше памяти, чем итеративный подход (и к тому же более удобочитаемый).

 np.max([array1, array2], axis=0)
 

Ваш цикл бесконечен, потому что вы i никогда не меняетесь. Если вы исправите это (либо путем добавления i = 1 , либо с помощью for i in range(0, len(array1)): ), вы будете добавлять элементы только там, где array1 один больше, и исключать любые пары, где они равны или где array2 один больше: else: потребуется.

Ответ №2:

Вы, вероятно, ищете что-то вроде numpy.maximum :

 import numpy as np

array1 = np.array([ 1, 2, 3, 4,  5,  6, 7, 8, 9,  10])
array2 = np.array([11, 1, 2, 4, 10, 60, 0, 3, 20, 33])

np.maximum(array1, array2)
# array([11,  2,  3,  4, 10, 60,  7,  8, 20, 33])
 

Комментарии:

1. Ха, np.maximum . Каждый день узнавайте что-то новое.

Ответ №3:

Пара вещей:

Во-первых, причина, по которой это продолжается, заключается в том, что вы не увеличиваете свой итератор i .

Во-вторых, в настоящее время вы добавляете индекс большего числа, а не большего числа. Попробуйте следующий код(чистый python):

 array3 = []
i = 0
while i < len(array1):
    if array1[i] > array2[i]:
        array3.append(array1[i])
    else:
        array3.append(array2[i])
    i  = 1
 

Ответ №4:

Это должно сработать!

 import numpy as np

array1=np.array([1,2,3,4,5,6,7,8,9,10])
array2=np.array([11,1,2,4,10,60,0,3,20,33])

array3=[]
i=0
while i<len(array1):
    if array1[i]>array2[i]:
        array3.append(array1[i])
    else:
        array3.append(array2[i])
    i  = 1

print(array3)
 

введите описание изображения здесь

Ответ №5:

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

 [max([array1[i],array2[i]]) for i in range(len(array1))]