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 Show 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 -
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 raTrue 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 NumPyCách dễ nhất để so sánh hai mảng NumPy là
Đâ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ử 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ả saiNế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], 80 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], 810 Đ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], 811 đầ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()
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], 813 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
Để đ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], 814 đầ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 nhauKhi 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], 816 đầu ra [5,7,11], [5,5,11], 817 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], 818 đầu ra [5,7,11], [5,5,11], 80 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ácCho đế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
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. |