#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))]