Перейти к содержимому

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

  • автор:

Поэлементное сравнение двух массивов python [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 2 года назад .

Есть два массива. Например, a=[1,2,3,4,5,6] и b=[3,1,3,4,1,6]. С помощью numpy нужно реализовать вывод общих элементов с поэлементным сравнением, т.е. [3,4,6]. Есть ли специальные функции в numpy? Я вижу только такое решение:

for i in range (0,len(b)): if b[[i]]==a[[i]]: array.append(int(b[[i]])) 

Вопрос 2. (не касается того, что выше) — что называется вектором строкой? Если дан массив a=array[1,2,3,4,5], если от него взять print(a) — вывод будет считаться вектором строкой?

Как сравнить два массива NumPy (с примерами)

Вы можете использовать следующие методы для сравнения значений двух массивов NumPy:

Метод 1: проверьте, равны ли два массива NumPy по элементам

#test if array A and array B are element-wise equal np.array_equal (A,B) 

Метод 2: проверьте, равны ли два массива NumPy по элементам (в пределах допуска)

#test if array A and array B are element-wise equal (within absolute tolerance of 2) np.allclose (A, B, atol= 2 ) 

В следующих примерах показано, как использовать каждый метод на практике.

Пример 1. Проверьте, равны ли два массива NumPy по элементам

В следующем коде показано, как использовать функцию array_equal() для проверки равенства элементов двух массивов NumPy:

import numpy as np #create two NumPy arrays A = np.array([1, 4, 5, 7, 10]) B = np.array([1, 4, 5, 7, 10]) #test if arrays are element-wise equal np.array_equal (A,B) True 

Функция возвращает True , так как два массива NumPy имеют одинаковую длину с одинаковыми значениями в одних и тех же позициях.

Однако функция вернет False , если два массива NumPy имеют одинаковые значения, но находятся в разных позициях:

import numpy as np #create two NumPy arrays with same values but in different positions A = np.array([1, 4, 5, 7, 10]) B = np.array([1, 4, 7, 5, 10]) #test if arrays are element-wise equal np.array_equal (A,B) False 

Пример 2. Проверьте, равны ли два массива NumPy по элементам (в пределах допуска)

В следующем коде показано, как использовать функцию allclose() для проверки, равны ли два массива NumPy по элементам в пределах значения допуска 2 :

import numpy as np #create two NumPy arrays A = np.array([1, 4, 5, 7, 10]) B = np.array([1, 4, 7, 8, 10]) #test if arrays are element-wise equal (within absolute tolerance of 2) np.allclose (A, B, atol= 2 ) True 

Функция возвращает True , поскольку все соответствующие элементы между каждым массивом NumPy находятся в пределах 2 друг от друга.

Например, мы видим, что элементы в третьей и четвертой позициях каждого массива разные, но поскольку каждая пара находится в пределах 2 значений друг от друга, функция возвращает true.

Однако если мы изменим аргумент абсолютного допуска (atol) на 1 , то функция вернет False :

import numpy as np #create two NumPy arrays A = np.array([1, 4, 5, 7, 10]) B = np.array([1, 4, 7, 8, 10]) #test if arrays are element-wise equal (within absolute tolerance of 1) np.allclose (A, B, atol= 1 ) False 

Функция возвращает False , поскольку соответствующие элементы в третьей позиции каждого массива NumPy не находятся в пределах 1 друг от друга.

Примечание.Обратитесь к документации NumPy, чтобы найти полное объяснение функций array_equal и allclose .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в NumPy:

Сравнение списков в Python

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

Обновлено: 2023-06-23 18:28:10 Сергей Бензенко автор материала

Сравнение списков в Python — возможные методы

Для сравнения можно использовать следующие функции:

  • reduce() и map();
  • collection.counter();
  • sort() вместе с оператором ==;
  • set() вместе с оператором ==;
  • List Comprehension.

Функции reduce() и map()

Мы можем использовать функцию map() вместе с functools.reduce() для сравнения элементов двух списков. Метод map() принимает в качестве аргументов функцию и коллекцию (список, кортеж, строку и т. д.). Он применяет переданную функцию к каждому элементу перебираемого объекта и возвращает коллекцию.

Метод functools.reduce() применяет переданную функцию к каждому переданному элементу рекурсивным способом.

Метод map() применит переданную функцию к каждому элементу, а reduce() обеспечит ее последовательное применение.

import functools l1 = [10, 20, 30, 40, 50] l2 = [10, 20, 30, 50, 40, 70] l3 = [10, 20, 30, 40, 50] if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l2), True): print ("Списки l1 и l2 одинаковые") else: print ("Списки l1 и l2 не одинаковые") if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l3), True): print ("Списки l1 и l3 одинаковые") else: print ("Списки l1 и l3 не одинаковые")
Списки l1 и l2 не одинаковые Списки l1 и l3 одинаковые

Метод collection.counter()

Метод collection.counter() может использоваться для сравнения списков. Функция counter() подсчитывает частоту элементов в списке и сохраняет данные в виде словаря, представленного в формате : . Если два списка имеют одинаковый выходной словарь, то они одинаковы.

Примечание: порядок элементов списка не влияет на результат работы метода counter().

import collections l1 = [10, 20, 30, 40, 50] l2 = [10, 20, 30, 50, 40, 70] l3 = [10, 20, 30, 40, 50] if collections.Counter(l1) == collections.Counter(l2): print ("Списки l1 и l2 одинаковые") else: print ("Списки l1 и l2 неодинаковые") if collections.Counter(l1) == collections.Counter(l3): print ("Списки l1 и l3 одинаковые") else: print ("Списки l1 и l3 неодинаковые")
Списки l1 и l2 неодинаковые Списки l1 и l3 одинаковые

Метод sort() и оператор ==

Для сравнения двух списков можно использовать метод sort() вместе с оператором ==. Метод sort() используется для сортировки таким образом, чтобы элементы в двух списках находились на одинаковых позициях.

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

Оператор == используется для сравнения списков элемент за элементом.

import collections l1 = [10, 20, 30, 40, 50] l2 = [10, 20, 30, 50, 40, 70] l3 = [50, 10, 30, 20, 40] l1.sort() l2.sort() l3.sort() if l1 == l3: print ("Списки l1 и l3 одинаковые") else: print ("Списки l1 и l3 неодинаковые") if l1 == l2: print ("Списки l1 и l2 одинаковые") else: print ("Списки l1 и l2 неодинаковые")
Списки l1 и l3 одинаковые Списки l1 и l2 неодинаковые

Метод set() и оператор ==

Метод set() управляет элементами отсортированных последовательностей без учета их порядка. Оператор ==используется для сравнения списков поэлементно.

l1 = [10, 20, 30, 40, 50] l3 = [50, 10, 30, 20, 40] a = set(l1) b = set(l3) if a == b: print("Списки l1 и l3 одинаковые") else: print("Списки l1 и l3 не одинаковые")
Списки l1 и l3 одинаковые

List Comprehension

List Comprehension можно использовать для сравнения двух списков.

l1 = [10, 20, 30, 40, 50] l3 = [50, 75, 30, 20, 40, 69] res = [x for x in l1 + l3 if x not in l1 or x not in l3] print(res) if not res: print("Списки l1 и l3 одинаковые") else: print("Списки l1 и l3 не одинаковые")

В приведенном выше коде мы устанавливаем элемент указателя x на список l1 и l3. Далее мы проверяем, присутствует ли элемент в списках.

[10, 75, 69] Списки l1 и l3 неодинаковые

Заключение

В этой статье мы рассмотрели несколько способов сравнения списков в Python.

Поэлементное сравнение двух массивов

Author24 — интернет-сервис помощи студентам

Добрый день. В общем, у меня проблема. Есть два первичных массива XT и YT. Мне нужно сравнить эта два массива на элементы, и где элементы совпадают, взять индексы этого элемента СРАЗУ двух массивов, и засунуть в 2 других массива X, и Y. Объясню на пальцах.
Массив XT = [1, 3, 11, 8, 0, 16, 16, 6, 15, 3, 22, 9, 16, 3, 22, 10, 19, 9, 9, 2, 17, 14, 22]
Массив YT = [0, 1, 4, 9, 16, 2, 13, 3, 18, 12, 8, 6, 6, 8, 12, 18, 3, 13, 2, 16, 9, 4, 1]
Берём 1 элемент массива XT — 1, его индекс 0, элемент 1 сравниваем с элементами массива YT и как мы видим 1 встречается 2 раза в массиве YT, это элементы под индексом 1, и 22, больше элементов равной 1 нету. Тоесть в массив X и Y заносятся только индексы.
Массивы X и Y имеют в результате вид:
X = [0, 0, 1, 1, 3, 3, 4, 5, 5, 6, 6, 7, 7, 9, 9, 11, 11, 12, 12, 13, 13, 17, 17, 18, 18, 19, 19]
Y = [1, 22, 7, 16, 10, 13, 0, 4, 19, 4, 19, 11, 12, 7, 16, 3, 20, 4, 19, 7, 16, 3, 20, 3, 20, 5, 18]
Сам я не смог этого сделать. Помогите новичку.
P.S. Так же выводить массивы с сортировкой по элементам массива X.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
p = 23 a = b = 1 x = 0 XT = [] YT = [] for x in range(p): w = (pow(x, 3) + x + 1) % p #w - y^2 y = pow(x, 2) % p XT.append(w) YT.append(y) x = x + 1 print(XT) print(YT) X = [] Y = [] for i in XT: for j in YT: if XT[i] == YT[j]: X.append(i) Y.append(j) for k in range(p): print(X[k],Y[k])

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *