Cách tạo hai mảng bằng python

Giả sử chúng ta có hai mảng nums1 và nums2 và một giá trị khác k. Chúng ta phải kiểm tra xem cả hai mảng có thể bằng nhau hay không bằng cách sửa đổi bất kỳ một phần tử nào từ nums1 theo cách sau (chỉ một lần). Chúng ta có thể thêm bất kỳ giá trị nào từ phạm vi [-k, k] vào bất kỳ phần tử nào của nums1

Vì vậy, nếu đầu vào giống như nums1 = [5,7,11] nums2 = [5,5,11] k = 8, thì đầu ra sẽ là True vì chúng ta có thể thêm -2 (trong phạm vi [-8,8]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • sắp xếp danh sách nums1 và nums2
  • nhiệt độ. = Sai
  • idx. = -1
  • đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy làm
    • nếu nums1[i] không giống với nums2[i], thì
      • nếu temp là true, thì
      • nhiệt độ. = Đúng
      • idx. = tôi
  • nếu idx là -1 hoặc. nums1[idx]-nums2[idx]. <= k thì
  • trả về Sai

Chúng ta hãy xem triển khai sau đây để hiểu rõ hơn -

Mã ví dụ

Bản thử trực tiếp

def solve(nums1, nums2, k):
   nums1.sort()
   nums2.sort()

   temp = False

   idx = -1
   for i in range(len(nums1)):
      if nums1[i] != nums2[i]:
         if temp:
           return False
         temp = True
         idx = i

   if idx == -1 or abs(nums1[idx]-nums2[idx]) <= k:
      return True
   return False

nums1 = [5,7,11]
nums2 = [5,5,11]
k = 8
print(solve(nums1, nums2, k))

Đầu vào

[5,7,11], [5,5,11], 8

đầu ra

True

Cách tạo hai mảng bằng python


Cách tạo hai mảng bằng python

Trong hướng dẫn này, bạn tìm hiểu cách so sánh các mảng trong NumPy và nó khác với so sánh các danh sách thông thường trong Python như thế nào

Bạn cũng sẽ tìm hiểu về các vấn đề với (A == B). all() và quan trọng hơn là cách khắc phục những lỗi đó

So sánh các mảng trong NumPy

Cách dễ nhất để so sánh hai mảng NumPy là

  1. Tạo một mảng so sánh bằng cách gọi == giữa hai mảng
  2. Cuộc gọi. all() cho đối tượng mảng kết quả để kiểm tra xem các phần tử có đúng không

Đây là một ví dụ

import numpy as np
  
A = np.array([[1, 1], [2, 2]])
B = np.array([[1, 1], [2, 2]])

equal_arrays = (A == B).all()
  
print(equal_arrays)

đầu ra

True

Nhưng làm thế nào nó hoạt động?

Khi bạn so sánh hai danh sách Python A == B là đủ

Nhưng khi bạn muốn so sánh các mảng NumPy thì không phải như vậy

Điều này là do mảng NumPy được so sánh hoàn toàn khác với danh sách Python

Cụ thể, các mảng NumPy được so sánh theo từng phần tử

Numpy array compare

Hãy thử so sánh hai mảng NumPy giống như bạn so sánh hai danh sách

import numpy as np
  
A = np.array([[1, 1], [2, 2]])
B = np.array([[1, 1], [2, 2]])
  
print(A == B)

Như bạn có thể thấy, kết quả là một ma trận, không phải boolean

[[ True  True]
 [ True  True]]

Trong ma trận kết quả này, mỗi phần tử là kết quả của phép so sánh hai phần tử tương ứng trong hai mảng

Để biết liệu tất cả các phần tử có bằng nhau hay không, bạn phải kiểm tra xem tất cả các phần tử trong ma trận so sánh có đánh giá đúng không

Điều này được thực hiện bằng cách sử dụng. phương thức tất cả ()

Bây giờ bạn đã hiểu cách so sánh hai mảng NumPy, hãy thảo luận về các vấn đề có thể phát sinh

Vấn đề với (A==B). tất cả các()

Mặc dù (A == B). all() cách tiếp cận có vẻ đơn giản, nó có một số thiếu sót mà bạn cần hiểu

Quan trọng hơn, bạn cần học cách khắc phục những khuyết điểm này

May mắn thay, nó thực sự dễ dàng

thiếu sót 1. Mảng rỗng cho kết quả sai

Nếu một trong các mảng NumPy được so sánh trống, bạn sẽ nhận được kết quả sai

Ví dụ

import numpy as np

A = np.array([1])
B = np.array([])

print((A==B).all())

đầu ra

True

Ở đây nó vẫn tuyên bố các mảng bằng nhau, mặc dù rõ ràng không phải vậy

Dung dịch. Sử dụng Phương thức array_equal()

Để khắc phục vấn đề này, bạn nên sử dụng phương thức array_equal tích hợp sẵn để so sánh các mảng

Ví dụ

import numpy as np

A = np.array([1])
B = np.array([])

print(np.array_equal(A,B))

đầu ra

[5,7,11], [5,5,11], 8
0

thiếu sót 2. Lỗi số nhỏ

Các mảng NumPy có các giá trị có lỗi số nhỏ là điều khá phổ biến

[5,7,11], [5,5,11], 8
10

Điều này có thể xảy ra do lỗi dấu phẩy động thực sự phổ biến

Kết quả là, bạn có các mảng có nghĩa là bằng nhau, nhưng do các lỗi nhỏ, việc so sánh các mảng đó cho kết quả Sai

Để giải quyết vấn đề này, bạn phải nới lỏng ý nghĩa của sự bình đẳng. Nói cách khác, bạn cần chấp nhận một lỗi nhỏ trong các giá trị

Dung dịch. sử dụng np. Phương thức allclose()

các np. phương thức allclose() kiểm tra xem hai mảng NumPy có bằng nhau hoặc rất gần bằng nhau không

Chẳng hạn, hãy so sánh hai mảng gần bằng nhau

[5,7,11], [5,5,11], 8
11

đầu ra

True

Những công việc này

Nhưng “gần như bình đẳng” có nghĩa là gì?

"Gần như nhau" được đặc trưng bởi các mức dung sai, được mô tả bằng hai tham số (tùy chọn) được truyền vào np. lệnh gọi hàm allclose()

  • rtol. Dung sai tương đối
  • đảo san hô. Sự khoan dung tuyệt đối

Nếu các phần tử x và y thỏa mãn phương trình sau với dung sai rtol và atol

[5,7,11], [5,5,11], 8
13

Khi đó các phần tử “gần bằng nhau” với nhau

Theo mặc định, các thông số này được

  • rto = 10e-5
  • atol = 10e-8

Để điều chỉnh các tham số này, hãy chỉ định các giá trị mới trong lệnh gọi hàm allclose() làm đối số từ khóa

Ví dụ

[5,7,11], [5,5,11], 8
14

đầu ra

True

Tuy nhiên thông thường các giá trị thông số mặc định là đủ

Thiếu sót 3. Mảng có kích thước khác nhau

Khi các mảng không cùng kích thước, các phép so sánh như (A=B). all() sẽ gây ra lỗi và chương trình sẽ bị treo nếu không được xử lý đúng cách

Ví dụ: hãy so sánh hai mảng 2D với số phần tử mảng khác nhau

[5,7,11], [5,5,11], 8
16

đầu ra

[5,7,11], [5,5,11], 8
17

Như bạn có thể thấy, điều này gây ra lỗi

Điều này là do khi so sánh các mảng có kích thước khác nhau, phép so sánh trả về một giá trị boolean duy nhất, trong trường hợp này là Sai

Vì vậy, cuối cùng bạn cố gắng gọi Sai. all(), điều này rõ ràng là thất bại

Dung dịch. sử dụng np. Hàm array_equal()

Một lần nữa, sử dụng np sẽ an toàn hơn. hàm array_equal() để so sánh hai mảng. Đó là do chức năng này được thiết kế để xử lý các trường hợp này để đưa ra kết quả chính xác

Chẳng hạn, hãy so sánh hai mảng có kích thước khác nhau

[5,7,11], [5,5,11], 8
18

đầu ra

[5,7,11], [5,5,11], 8
0

Tiếp theo, hãy thảo luận về các so sánh mảng NumPy ngoài việc bằng với

so sánh khác

Cho đến nay tôi đã giả định rằng bạn quan tâm đến sự bằng nhau của các mảng

Tuy nhiên, có bốn phép so sánh khác mà bạn thường muốn thực hiện

  • Lớn hơn
  • Lớn hơn hoặc bằng
  • Ít hơn
  • Nhỏ hơn hoặc bằng

Những so sánh này rất dễ thực hiện với các chức năng tích hợp

import numpy as np
  
A = np.array([[1, 1], [2, 2]])
B = np.array([[1, 1], [2, 2]])

equal_arrays = (A == B).all()
  
print(equal_arrays)
0

Kết quả của những so sánh này không phải là một giá trị boolean duy nhất. Thay vào đó, những so sánh này được thực hiện theo từng yếu tố. Do đó, kết quả là một ma trận Booleans cho mỗi so sánh tương ứng

Đây là một ví dụ

import numpy as np
  
A = np.array([[1, 1], [2, 2]])
B = np.array([[1, 1], [2, 2]])

equal_arrays = (A == B).all()
  
print(equal_arrays)
1

đầu ra

import numpy as np
  
A = np.array([[1, 1], [2, 2]])
B = np.array([[1, 1], [2, 2]])

equal_arrays = (A == B).all()
  
print(equal_arrays)
2

Để kiểm tra xem tất cả các phần tử trong mảng A so với B như thế nào, hãy sử dụng. hàm all() trên mảng so sánh

2 mảng có thể bằng nhau không?

Hai mảng được gọi là bằng nhau nếu. cả hai đều chứa cùng một tập hợp các phần tử, cách sắp xếp (hoặc hoán vị) của các phần tử có thể/có thể không giống nhau . Nếu có lặp lại thì số phần tử lặp lại cũng phải bằng nhau thì hai mảng mới bằng nhau.

Bạn có thể đánh đồng các mảng trong Python không?

array_equiv(). Bạn cũng có thể sử dụng numpy. array_equiv() hàm kiểm tra xem hai mảng có bằng nhau hay không trong Python . Hàm này trả về True nếu cả hai mảng có cùng hình dạng và tất cả các phần tử đều bằng nhau, ngược lại trả về False.