Làm thế nào để bạn viết một sản phẩm cartesian trong python?

Có thể tính tích cartesian của các vectơ trong NumPy không? . Chúng ta hãy xem các phương pháp khác nhau để tính tích cartesian của vectơ. Trước khi tiếp tục, chúng ta hãy lùi lại một bước và xác định ý nghĩa của sản phẩm cartesian

Tích cartesian của X và Y, ký hiệu là X x Y, là tập hợp X x Y = {[a,b]. a thuộc X và b thuộc Y}. [a,b] là các cặp phần tử được sắp xếp theo thứ tự [hoặc một cặp gồm hai số [hoặc biến] được viết trong ngoặc và được phân tách bằng dấu phẩy]. Ví dụ: nếu X = {7,8} và Y = {1,2,4} thì tích cartesian của X và Y là X x Y = {[7,1],[7,2],[7,4 . Hiểu rồi? . X = {q,w,r} và Y = {0,1} cartesian của X và Y ký hiệu là X x Y = {[q,0], [q,1],[w,0],[w . Điều này nên rõ ràng bây giờ, phải không? . Hãy để chúng tôi tiếp tục

Ghi chú. Tuyên bố từ chối trách nhiệm nhỏ. chúng tôi cho rằng bạn đã quen thuộc với các kỹ thuật Python như hiểu danh sách và được đào tạo bài bản về các hàm dựng sẵn của NumPy. Nếu bất kỳ khái niệm hoặc thuật ngữ nào được thảo luận trong bài viết này xa lạ với bạn, trước tiên vui lòng xem lại liên kết sau

Có một số phương pháp để xác định tích cartesian của các vectơ, bao gồm

  • Cách tiếp cận 1. itertools. phương pháp sản phẩm []
  • Cách tiếp cận 2. Sử dụng phương thức meshgrid[] từ thư viện NumPy
  • Cách tiếp cận 3. Sự kết hợp của numpy. chuyển vị [], numpy. gạch[] và numpy. nói lại[]
  • Cách tiếp cận 4. phương pháp cho vào
  • Cách tiếp cận 5. Hàm do người dùng định nghĩa

Bây giờ chúng ta hãy xem xét kỹ lưỡng từng cách tiếp cận đã nói ở trên

Cách tiếp cận 1

Chúng tôi sẽ sử dụng gói itertools trong phương thức này, gói này có một số phương thức liên quan đến tổ hợp & hoán vị. itertools. phương thức product[] có thể được sử dụng để tính tích cartesian của "n" lần lặp. itertools. Phương thức product[] chấp nhận iterables làm đối số đầu vào và trả về tích cartesian của iterables. Hãy để tôi minh họa điều này với một ví dụ

Mã số

import itertools as it
import numpy as np

array1 = np.array[[1, 2, 3]]
array2 = np.array[[1, 2, 3]]
Output = np.array[list[it.product[array1,array2]]]
print[Output]

đầu ra

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

Chúng tôi đã tính toán tích cartesian của mảng1 và mảng2 trong đoạn mã trước bằng cách sử dụng hàm product[] trong gói itertools và lưu kết quả dưới dạng kết hợp

Cách tiếp cận 2

Trong kỹ thuật này, chúng ta sẽ sử dụng một hàm sẵn có do gói NumPy cung cấp để tính tích cartesian của hai mảng NumPy. Để tính tích cartesian của hai mảng NumPy, chúng ta sẽ sử dụng phương thức meshgrid[] từ thư viện NumPy. Các ma trận được truyền dưới dạng tham số đầu vào cho numpy. phương thức meshgrid[], trả về tích chéo của hai ma trận

Để tính tích cartesian, chúng ta có thể sử dụng hàm numpy. phương thức meshgrid[] theo hai cách. Với sự hỗ trợ của một ví dụ, chúng ta hãy khám phá phương pháp đầu tiên, trong đó chúng ta sẽ chỉ sử dụng numpy. hàm meshgrid[] để tính tích cartesian

Mã số

import numpy as np

arr = np.array[[1, 2, 3]]
Output = np.array[np.meshgrid[arr, arr]].T.reshape[-1,2]
print[Output]

đầu ra

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

Cách tiếp cận thứ hai sẽ bao gồm việc kết hợp numpy. meshgrid[] và numpy. hàm dstack[]. các numpy. phương thức dstack[] chấp nhận một chuỗi mảng làm đầu vào & tạo mảng được tạo bằng cách xếp chồng các mảng làm đầu ra

Mã số

import numpy as np

arr = np.array[[1, 2, 3]]
Output = numpy.dstack[np.meshgrid[arr, arr]].reshape[-1,2]
print[Output]

đầu ra

[[1 1]
 [2 1]
 [3 1]
 [1 2]
 [2 2]
 [3 2]
 [1 3]
 [2 3]
 [3 3]]

Sử dụng hàm meshgrid[] của NumPy, chúng tôi đã tính toán tích cartesian của mảng với chính nó trong cả hai chương trình trước đó

Cách tiếp cận 3

Chúng tôi cũng sẽ sử dụng các chức năng sẵn có của NumPy trong phương pháp này. Các chức năng numpy. chuyển vị [], numpy. gạch[] và numpy. repeat[] sẽ được kết hợp. Để chuyển đổi mảng của chúng tôi, chúng tôi sử dụng numpy. chuyển vị[]. cả numpy. gạch [] và numpy. Các hàm repeat[] tạo một mảng bằng cách sao chép nội dung mảng theo số lần được lập trình viên chỉ định làm đầu vào của hàm. Hãy để tôi minh họa điều này với một ví dụ

Mã số

import numpy as np

arr = np.array[[1, 2, 3]]
Output = np.transpose[[np.tile[arr, len[arr]],np.repeat[arr, len[arr]]]]
print[Output]

đầu ra

[[1 1]
 [2 1]
 [3 1]
 [1 2]
 [2 2]
 [3 2]
 [1 3]
 [2 3]
 [3 3]]

Trong chương trình trước, bạn có thể đã quan sát thấy rằng chúng ta đã tính tích cartesian của mảng với chính nó

Cách tiếp cận 4

Trình vòng lặp for-in là một cách đơn giản hơn để hoàn thành cùng một mục đích như hai cách tiếp cận trước đó. Trong Python, for-in iterator được sử dụng để lặp qua mọi phần tử trong một iterable. Kỹ thuật này không cần cài đặt bất kỳ gói hoặc thư viện bổ sung nào. Hãy để chúng tôi hiểu rõ hơn điều này bằng cách sử dụng một ví dụ

Mã số

________số 8

đầu ra

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

Trong đoạn mã trước, chúng ta đã tính toán tích chéo cartesian giữa hai mảng bằng cách sử dụng trình vòng lặp for-in lồng nhau. sử dụng np. array[], chúng tôi đã lưu trữ kết quả trong một mảng NumPy

Ghi chú. Các phương pháp trên [cách tiếp cận 2, 3, & 4] phù hợp để tính tích cartesian của hai mảng

Cách tiếp cận 5

Chúng ta sẽ xem xét một số phương pháp do người dùng định nghĩa để tính tích cartesian của mảng n số theo cách tiếp cận này

Hãy bắt đầu với hàm đầu tiên do người dùng định nghĩa, tính toán tích cartesian của n mảng số bằng cách sử dụng hàm numpy. Hàm result type[] và phương pháp hiểu danh sách. các numpy. Phương thức result type[] tạo ra kiểu dữ liệu bắt nguồn từ việc triển khai các nguyên tắc quảng cáo kiểu NumPy cho các tham số, trong trường hợp này là danh sách các mảng

Mã số

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]
0

đầu ra

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

Bây giờ chúng ta hãy kiểm tra hàm thứ hai do người dùng định nghĩa, hàm này tính toán tích cartesian của n mảng số sử dụng các hàm sẵn có của NumPy chẳng hạn như numpy. ix_[], gọn gàng. mảng phát sóng [], numpy. prod[], numpy. loại kết quả [] và numpy. trống rỗng[]. Nếu bạn gặp bất kỳ thuật ngữ lạ nào, bạn nên đọc qua tài liệu chính thức của NumPy để hiểu rõ hơn về đoạn mã sau

Mã số

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]
2

đầu ra

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

Bây giờ, hãy xem xét hàm cuối cùng do người dùng tạo của chúng ta, tính toán tích cartesian của n mảng số tận dụng các hàm sẵn có của NumPy, chẳng hạn như numpy. asarray[], gọn gàng. số không [], numpy. prod[] và numpy. repeat[], cũng như chiến lược hiểu danh sách và đệ quy. Bạn nên đọc qua tài liệu chính thức của NumPy nếu bạn gặp bất kỳ thuật ngữ nào không rõ ràng để hiểu mã sau

Mã số

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]
4

đầu ra

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

Sử dụng các hàm khác nhau do người dùng định nghĩa, chúng tôi đã tính toán tích cartesian của mảng với chính nó trong tất cả các ví dụ mã trước đó

Nói chung, chúng tôi có thể dự đoán rằng việc sử dụng các chức năng sẵn có sẽ nhanh hơn đối với các đầu vào nhỏ hơn, trong khi một hàm do người dùng xác định có thể nhanh hơn đối với các đầu vào lớn hơn. Hơn nữa, các cách tiếp cận 2, 3 và 4 sẽ không hỗ trợ tích n chiều tổng quát vì chúng thiếu các tương đương rõ ràng ở các chiều cao hơn. Do đó, cũng đáng để điều tra hành vi của các chức năng do người dùng xác định. Chúng tôi phát hiện ra rằng chức năng do người dùng xác định đầu tiên của chúng tôi, như được mô tả trong phương pháp 5, là giải pháp nhanh nhất và tối ưu nhất cho vấn đề

Sản phẩm có nghĩa là gì trong Python?

Tổng quan. Trong Python, itertools là một mô-đun trong Python cung cấp các chức năng. Các chức năng này giúp lặp lại thông qua iterables. Phương thức product[] của mô-đun itertools trả về tích cartesian của các lần lặp đầu vào

Tích Descartes của 3 tập hợp là gì?

Ghi chú. A × A × A = {[a, b, c]. a, b, c ∈ A} .

Tích Descartes trong máy tính là gì?

Sản phẩm Descartes. Một tập hợp mới có thể được xây dựng bằng cách liên kết mọi phần tử của tập hợp này với mọi phần tử của tập hợp khác. Tích Descartes của hai tập hợp A và B, kí hiệu là A × B là tập hợp tất cả các cặp [a, b] có thứ tự sao cho a là phần tử của A và b là phần tử của B

Chủ Đề