Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Một số phức có hai phần, phần thực và phần tưởng tượng. Các số phức được biểu diễn dưới dạng A+Bi hoặc A+BJ, trong đó A là phần thực và B là phần tưởng tượng.

Python hỗ trợ kiểu dữ liệu phức tạp là tính năng tích hợp, có nghĩa là chúng tôi có thể trực tiếp thực hiện các hoạt động khác nhau trên số phức trong Python.

Đầu tiên, Python sử dụng ký hiệu A+Bj để biểu diễn số phức có nghĩa là Python sẽ nhận ra 3+4j là một số hợp lệ nhưng

c = complex(a,b)
0 không hợp lệ. Hãy thử nó trong bảng điều khiển Python:
c = complex(a,b)
0 is not valid
. Let's try it out in python console:


>>> a=3+4j
>>> b=3+4i
SyntaxError: invalid syntax

Tạo kiểu dữ liệu phức tạp bằng cách sử dụng phức tạp ()

Chúng ta có thể tạo số phức từ hai số thực. Cú pháp để làm điều này là:

c = complex(a,b)

Trong đó, A & B có loại dữ liệu thực và C sẽ thuộc các loại dữ liệu phức tạp.

Hãy thử nó trong bảng điều khiển Python:


>>> a=5
>>> b=7
>>> c=complex(a,b)
>>> print(c)
(5+7j)

Truy cập phần thực và tưởng tượng từ số phức

Sau khi tạo kiểu dữ liệu phức tạp, chúng ta có thể truy cập vào phần thực và tưởng tượng bằng cách sử dụng các mô tả dữ liệu tích hợp

c = complex(a,b)
1 và
c = complex(a,b)
2. Hãy thử nó trong bảng điều khiển Python: Let's try it out in python console:


>>> a = 5+6j
>>> a.real
5.0
>>> a.imag
6.0

Đọc số phức từ người dùng

Chúng ta có thể đọc số phức trực tiếp từ người dùng bằng hàm tích hợp

c = complex(a,b)
3. Vì hàm
c = complex(a,b)
3 Trả về chuỗi, chúng tôi phải chuyển đổi kết quả thành phức tạp bằng cách sử dụng hàm
c = complex(a,b)
5. Thử ví dụ sau:Try following example:


a = complex(input('Enter complex number:'))
print('Given complex number is:',a)

Đầu ra

Enter complex number:2+3j
Given complex number is: (2+3j)

Tìm liên hợp số phức

Kiểu dữ liệu phức tạp có phương pháp tích hợp được gọi là

c = complex(a,b)
6 để tìm liên hợp số phức. Hãy thử nó trong bảng điều khiển Python:Let's try it out in python console:


>>> a=10-6j
>>> a.conjugate()
(10+6j)

Ngoài ra, phép trừ, nhân và chia theo số phức

Python hỗ trợ bổ sung trực tiếp, trừ, nhân và chia bằng cách sử dụng toán tử

c = complex(a,b)
7. Hãy thử nó trong bảng điều khiển Python:Let's try it out in python console:


>>> a=1+2j
>>> b=3+4j
>>> a+b
(4+6j)
>>> a-b
(-2-2j)
>>> a*b
(-5+10j)
>>> a/b
(0.44+0.08j)

Numb3rs

Lucio di Jasio, trong việc lập trình vi điều khiển PIC 16 bit trong C (Ấn bản thứ hai), 2012Programming 16-Bit PIC Microcontrollers in C (Second Edition), 2012

Các loại dữ liệu phức tạp

Trình biên dịch MPLAB C hỗ trợ các loại dữ liệu phức tạp như là một phần mở rộng của cả hai loại số nguyên và dấu phẩy động. Dưới đây là một tuyên bố ví dụ cho một loại dấu phẩy động chính xác đơn:

__complex__ float z;

Lưu ý rằng việc sử dụng một dấu gạch dưới kép trước và sau từ khóa phức tạp.

Biến Z, được xác định như vậy, hiện có một phần thực và một phần tưởng tượng có thể được giải quyết riêng lẻ bằng cú pháp: __real__ z và __imag__ z tương ứng.

Tương tự, khai báo tiếp theo tạo ra một biến phức tạp loại số nguyên 16 bit:

__complex__ int x;

Các hằng số phức được tạo ra dễ dàng thêm hậu tố I hoặc J, như trong các ví dụ sau:

x = 2 + 3j;

z = 2.0f + 3.0fj;

Tất cả các hoạt động số học tiêu chuẩn (+, -, *, /) được thực hiện chính xác trên các loại dữ liệu phức tạp. Ngoài ra, toán tử của ~ ~ tạo ra liên hợp phức tạp.complex data types. Additionally the “~” operator produces the complex conjugate.

Các loại phức tạp có thể khá tiện dụng trong một số loại ứng dụng, làm cho mã dễ đọc hơn và giúp tránh các lỗi tầm thường. Thật không may, khi viết bài này, sự hỗ trợ của MPLAB IDE của các biến phức tạp trong quá trình gỡ lỗi chỉ là một phần, chỉ cho phép truy cập vào phần thực thông qua cửa sổ đồng hồ và hàm hỗ trợ chuột.

Đọc chương đầy đủ

URL: https://www.sciencedirect.com/science/article/pii/B978185617870900004X

Nền tảng

Berthold Daum, trong mô hình hóa các đối tượng kinh doanh với Lược đồ XML, 2003Modeling Business Objects with XML Schema, 2003

1.7.1 Các loại dưới dạng biểu thức thông thường

Các loại dữ liệu cổ điển, như chúng ta biết chúng từ các ngôn ngữ lập trình sớm và hệ thống cơ sở dữ liệu, khá cơ bản: chuỗi, số nguyên, float, boolean, nhị phân, ngày, thời gian tạo ra một bộ dữ liệu hoạt động điển hình. Cả một thế hệ lập trình viên đã vui vẻ sống với bộ dữ liệu này.

Sau đó, các loại dữ liệu trừu tượng đã được giới thiệu, một ý tưởng đã được chọn và làm cho tinh vi hơn bằng lập trình hướng đối tượng. Các loại dữ liệu trừu tượng đã mở rộng khái niệm về các loại dữ liệu, vì chúng cũng phụ thuộc vào các loại dữ liệu phức tạp. Một loại dữ liệu mới có thể được xây dựng bằng cách hình thành một mẫu từ các loại dữ liệu hiện có, đặc biệt là các loại dữ liệu nguyên thủy được đề cập ở trên.complex data types. A new data type can be constructed by forming a pattern out of existing data types, in particular the above-mentioned primitive data types.

Mặc dù phương pháp này cho phép xây dựng các loại dữ liệu khá phức tạp và các phân cấp loại phức tạp tương tự (để so sánh giữa các mô hình loại hướng đối tượng và các mô hình loại hướng tài liệu, xem Chương 10), nó không cho phép kiểm soát tốt hơn Loại dữ liệu. Trong các hệ thống loại cổ điển, một tài liệu văn bản là một chuỗi là một chuỗi là một chuỗi. Cấu trúc bên trong của chuỗi không quan tâm đến hệ thống loại.4Chapter 10), it does not allow the finer control over the content of primitive data types. In classical type systems, a text document is a string is a string is a string. The internal structure of the string is of no concern to the type system.4

Tình huống này hoàn toàn không thể chấp nhận được khi trao đổi tài liệu và tin nhắn dựa trên văn bản. Trợ giúp đến dưới dạng biểu cảm thường xuyên. Vì các biểu thức thông thường cho phép chúng tôi hạn chế các tài liệu văn bản ở một số mẫu nhất định, chúng cho phép chúng tôi các chuỗi loại phụ hiệu quả và do đó giới thiệu toàn bộ hệ thống phân cấp của các loại tài liệu. Các phần sau đây thảo luận về những điều cơ bản của một lý thuyết loại như vậy. Cuộc thảo luận dựa trên [HOSOYA2000], nhưng được mở rộng với việc giới thiệu hoạt động thay thế.[Hosoya2000], but is extended with the introduction of the substitution operation.

Đọc chương đầy đủ

URL: https://www.sciencedirect.com/science/article/pii/B9781558608160500033

Khai thác bằng chứng pháp y (JPEG và TIFF)

Chet Hosmer, trong pháp y Python, 2014Python Forensics, 2014

Đánh giá chương

Trong chương này, tôi đã sử dụng các yếu tố ngôn ngữ Python mới bao gồm từ điển để xử lý các loại dữ liệu phức tạp hơn và giao diện với PIL. Tôi cũng đã sử dụng PIL để trích xuất dữ liệu Exif một cách có hệ thống từ các bức ảnh bao gồm dữ liệu GPS khi có sẵn với các bức ảnh. Tôi đã trình bày không chỉ cách trích xuất dữ liệu GPS RAW mà còn làm thế nào để tính toán các vị trí LON và LAT và sau đó đã tích hợp đầu ra của chương trình vào một chương trình ánh xạ trực tuyến để vẽ các vị trí của các bức ảnh. Ngoài ra, tôi đã trình bày cách trích xuất dữ liệu từ cấu trúc dữ liệu EXIF ​​và bao gồm một số giá trị đó trong tệp .csv kết quả chứa thông tin về tệp, camera, dấu thời gian và thông tin vị trí.complex data types and to interface with the PIL. I also utilized the PIL to systematically extract EXIF data from photographs including GPS data when available with photographs. I demonstrated not only how to extract the GPS raw data but also how to calculate the lon and lat positions and then later integrated the output of the program into an online mapping program to plot the locations of the photographs. In addition, I demonstrated how to extract data from the EXIF data structure and included some of those values in a resulting .csv file that contains information about the file, camera, timestamp, and location information.

Đọc chương đầy đủ

URL: & nbsp; https: //www.sciencedirect.com/science/article/pii/b97801241867670000505050

Tối ưu hóa việc thực hiện biểu tượng của phát triển Rhapsody statecharts

Amal Khalil, Juergen Dingel, trong những tiến bộ trong máy tính, 2018Advances in Computers, 2018

8.1 Tóm tắt và công việc trong tương lai

Trong chương này, chúng tôi đã trình bày hai kỹ thuật khác nhau để tối ưu hóa việc thực hiện biểu tượng của các statecharts rhapsody phát triển. Kỹ thuật đầu tiên tái sử dụng bộ phiên bản trước của mô hình để cải thiện việc thực hiện biểu tượng của phiên bản hiện tại sao cho nó tránh được sự khám phá dự phòng các đường dẫn thực thi chung giữa hai phiên bản, trong khi kỹ thuật thứ hai sử dụng phân tích tác động thay đổi để giảm phạm vi phạm vi của việc thăm dò chủ yếu tập thể dục các bộ phận bị ảnh hưởng bởi sự thay đổi. Một đóng góp quan trọng trong công việc này là bằng chứng về khái niệm về tính khả thi và hiệu quả của hai kỹ thuật tối ưu hóa được đề xuất sao cho chúng có thể được sử dụng để tăng tốc quá trình phân tích của các mô hình hành vi đó khi chúng phát triển. Hai kỹ thuật được đề xuất trong công việc này được áp dụng trên cả các statecharts cá nhân và giao tiếp và được triển khai và tích hợp trong công cụ IBM Rhapsody như một tập hợp ba người trợ giúp bên ngoài. Trình trợ giúp đầu tiên đại diện cho các thành phần chuyển đổi được xây dựng trong bối cảnh bổ trợ của IBM Rhapsody Rulescomposer và chịu trách nhiệm cho (1) làm phẳng mô hình Rhapsody vào các máy móc giống như giao tiếp của chúng tôi (CMLM), (2) tính toán dữ liệu và các phụ thuộc giao tiếp trong CMLM và MLM của nó và (3) tạo ra biểu diễn Java của biểu diễn CMLM. Trình trợ giúp thứ hai đại diện cho thành phần chịu trách nhiệm: (1) ánh xạ một báo cáo khác biệt được tạo từ công cụ Rhapsody Diffmerge để so sánh giữa hai phiên bản liên tiếp của mô hình Rhapsody thành một báo cáo khác biệt giữa biểu diễn CMLM của mỗi phiên bản và (2 ) Xác định các yếu tố bị ảnh hưởng của từng thay đổi được tìm thấy trong báo cáo khác biệt. Người trợ giúp cuối cùng đại diện cho các thành phần thực thi tượng trưng dựa trên KLEE của chúng tôi bao gồm SE tiêu chuẩn và hai tối ưu hóa được đề xuất: MSE và DSE. Chúng tôi đã thực hiện đánh giá rộng rãi về hai kỹ thuật được đề xuất trên một bộ ba statechart phân cấp riêng lẻ và một mô hình của ba statechart giao tiếp với một tập hợp 160 phiên bản mô hình khác nhau và các loại thay đổi nguyên tử khác nhau bao gồm sửa đổi, bổ sung và xóa mô hình. Kết quả từ các thí nghiệm của chúng tôi cho thấy một lượng tiết kiệm đáng kể lên tới 90+% trong một số kịch bản nhất định liên quan đến kích thước của các bộ được tạo ra từ việc áp dụng một trong hai kỹ thuật và thời gian thực hiện để tạo ra chúng. Kết quả cũng nêu bật các yếu tố chính chủ yếu ảnh hưởng đến hiệu quả của từng kỹ thuật. Đây là loại thay đổi và vị trí cho kỹ thuật MSE và các đặc điểm mô hình liên quan đến số lượng chuyển đổi đa đường trong một mô hình và sự phụ thuộc giữa các chuyển đổi của nó cho kỹ thuật DSE.

Một số hướng cho công việc trong tương lai bao gồm nhưng không giới hạn ở những điều sau đây:

(1)

Hướng đầu tiên là mở rộng hỗ trợ cho các tính năng nâng cao hơn của mã hành động bao gồm các loại dữ liệu phức tạp hơn và các cuộc gọi phương thức do người dùng xác định. Cả hai tính năng có thể dễ dàng được thêm vào triển khai hiện tại bằng cách mở rộng thành phần giao diện của chúng tôi với công cụ thực thi biểu tượng KLEE.complex data types and user-defined method calls. Both features can be easily added to the current implementation by extending our interface component with the KLEE symbolic execution engine.

(2)

Một hướng quan trọng khác là mở rộng sự hỗ trợ cho một số ngữ nghĩa cụ thể do người dùng xác định hoặc miền cụ thể của các tính năng statechart cụ thể (ví dụ: lược đồ ưu tiên cho chuyển đổi mâu thuẫn và thứ tự thực hiện các trạng thái đồng thời) được sử dụng trong thực tế để ghi đè lên một trong những công cụ mặc định . Theo hiểu biết tốt nhất của chúng tôi, chỉ những học viên xây dựng các mô hình này mới có thể xác định các sàng lọc như vậy. Trong những trường hợp như vậy, một sửa đổi cho các thành phần chuyển đổi hiện tại của chúng tôi nên được thực hiện.

(3)

Hướng thứ ba là mở rộng biểu diễn tập hợp để bao gồm các giá trị trường hợp thử nghiệm của các biến tượng trưng được sử dụng để đạt được trạng thái biểu tượng khả thi sao cho một tập hợp các dấu vết hoàn chỉnh Kiểm tra và giám sát thời gian chạy. Tiện ích mở rộng này là khả thi và được hỗ trợ bởi tiện ích Klee của Klee-tool, cho phép đọc nội dung của các tệp nhị phân của .Ktest nhất của các trường hợp thử nghiệm được tạo bởi công cụ.ktest-tool” utility that enables the reading of the contents of the “.ktest” binary files of the test cases generated by the tool.

(4)

Hướng thứ tư là mở rộng đánh giá công việc được đề xuất để xem xét nhiều mô hình hơn với các phiên bản thực tế. Tiện ích mở rộng này bị giới hạn bởi khả năng truy cập vào các kho lưu trữ mô hình hiện có.

(5)

Hướng thứ năm là xây dựng một công cụ truy vấn dựa trên thiết lập để tạo điều kiện cho các truy vấn của người dùng và trực quan hóa các phần phụ của cây. Tính năng này rất quan trọng để cung cấp cho chúng tôi một cách chính xác và tự động hơn để kiểm tra một số tính năng trong một bộ nhất định hoặc để so sánh hai bộ.

(6)

Cuối cùng, công việc được đề xuất trong nghiên cứu này có thể được điều chỉnh để xem xét các mô hình dựa trên trạng thái khác được sử dụng trong các công cụ MDE khác, đặc biệt là các công cụ nguồn mở trong đó cơ hội mở rộng cao hơn và không bị giới hạn bởi việc sử dụng một số công cụ độc quyền.

Đọc chương đầy đủ

URL: https://www.sciencedirect.com/science/article/pii/S0065245817300487

Phương pháp và kỹ thuật của GIS

Peng Yue, Zhenyu Tan, trong Hệ thống thông tin địa lý toàn diện, 2018Comprehensive Geographic Information Systems, 2018

1.06.2.2.2 Mô hình liên quan đến đối tượng

Công nghệ RDBMS đã đạt được thành công lớn trong lĩnh vực thương mại; Hàng trăm ngàn ứng dụng thương mại chạy trên các RDBMS khác nhau. Tuy nhiên, những thay đổi mới đang hình thành từ các miền với các loại dữ liệu phức tạp, chẳng hạn như văn bản dài trong các hệ thống sắp chữ hỗ trợ máy tính, hình ảnh trong các trường chăm sóc sức khỏe và dữ liệu không gian thời gian trong GIS. Các mục tiêu thiết kế của các RDBS truyền thống đến từ xử lý giao dịch kinh doanh, vì vậy rất khó để đáp ứng nhu cầu của các ứng dụng cơ sở dữ liệu mới. Cụ thể hơn, RDBS chỉ cung cấp các loại dữ liệu chính hạn chế, một số trong đó không hỗ trợ các loại dữ liệu do người dùng xác định hoặc các hoạt động và chức năng do người dùng xác định. Các hệ thống này không thể thể hiện các đối tượng dữ liệu phức tạp một cách đơn giản và rõ ràng. Một số thăm dò và đổi mới liên quan đến việc tích hợp các công nghệ cơ sở dữ liệu và công nghệ OO đã được bắt đầu vào những năm 1990. Các hệ thống cơ sở dữ liệu liên quan đến đối tượng (ORDBS), như tên cho thấy, được tạo ra từ sự kết hợp của các mô hình quan hệ và tư duy OO. Cách tiếp cận quan hệ đối tượng này cả hai kế thừa các công nghệ RDBS hiện có và cung cấp hỗ trợ cho quản lý dữ liệu đối tượng. Nhìn chung, hầu hết các ORDBS chủ yếu được triển khai trong các mô hình quan hệ nhưng chỉ thêm hỗ trợ một phần cho các loại đối tượng đơn giản.complex data types, such as the long raw text in computer-assisted typesetting systems, images in healthcare fields, and temporal-spatial data in GIS. The design goals of traditional RDBSs come from business transaction processing, so it is difficult to meet the needs of new database applications. More specifically, RDBSs only provide limited primary data types, some of which do not support user-defined data types or user-defined operations and functions. These systems cannot express complex data objects in a simple and clear manner. Some exploration and innovation regarding the integration of database technologies and OO technologies were started in the 1990s. Object-relational database systems (ORDBSs), as the name suggests, are generated from a combination of relational models and OO thinking. This object-relational approach both inherits existing RDBS technologies and provides support for object data management. Overall, most ORDBSs are mainly implemented within relational models but merely add partial support for simple object types.

Năm 1999, SQL3 (còn được gọi là SQL99) đã được xuất bản để cung cấp một số phần mở rộng OO cho SQL và do đó các đối tượng có thể được lưu trữ trong hàng bảng quan hệ (Melton, 2002). Một trong những phần mở rộng quan trọng nhất của SQL3 là việc giới thiệu các loại dữ liệu OO mới, cụ thể là loại dữ liệu hàng và loại dữ liệu trừu tượng (ADT). Loại hàng là một tập hợp các định nghĩa thuộc tính, thể hiện có thể được coi là một tuple trong bảng quan hệ. ADT cho phép người dùng tạo một kiểu dữ liệu tùy chỉnh bao gồm các thuộc tính và định nghĩa phương thức và hỗ trợ di sản loại. Trong một ordbs, loại sở hữu các đặc điểm của lớp, giúp tăng cường đáng kể khả năng của các RDBS truyền thống để lưu trữ và thao tác dữ liệu đối tượng. Ngoài ra, tiêu chuẩn liên kết ngôn ngữ SQL/đối tượng nhằm nhúng SQL vào ngôn ngữ Java và làm cho ngôn ngữ lập trình OO tương tác với SQL theo cách gốc và trực tiếp. Sau đó, RDBMS thương mại dần dần phát triển thành các hệ thống quản lý cơ sở dữ liệu quan hệ đối tượng (ORDBMS) bằng cách thêm hỗ trợ cho các loại và chức năng dữ liệu tùy chỉnh. Tuy nhiên, các tiêu chuẩn SQL3 tụt hậu so với việc triển khai thực tế của hầu hết các ORDBMS, do đó các sản phẩm khác nhau có thuật ngữ và cú pháp ngôn ngữ riêng và cung cấp các cấp độ hỗ trợ khác nhau cho các mô hình OO.Melton, 2002). One of the most significant extensions of SQL3 is the introduction of a new OO data types, namely, row type and abstract data type (ADT). Row type is a collection of attribute definitions, the instance of which can be regarded as a tuple in relational table. ADT enables users to create a customized data type that consists of attributes and method definitions and supports type heritance. In an ORDBS, type possesses the characteristics of class, which greatly enhances the capability of traditional RDBSs to store and manipulate object data. Additionally, the SQL/object language binding standard is intended to embed SQL in Java language and make OO programming language interact with SQL in a native and direct manner. Later, commercial RDBMSs gradually evolved into object-relational database management systems (ORDBMs) by adding support for customized data types and functions. However, SQL3 standards lag behind the actual implementation of most ORDBMSs, so different products have their own terminology and language syntax and offer different levels of support for OO models.

Đọc chương đầy đủ

URL: & nbsp; https: //www.sciencedirect.com/science/article/pii/b9780124095489095968

Phát hiện bất thường

Patrick Schneider, Fatos XHAFA, trong phát hiện bất thường và xử lý sự kiện phức tạp trên các luồng dữ liệu IoT, 2022Anomaly Detection and Complex Event Processing over IoT Data Streams, 2022

Các kỹ thuật khác

Trong phần còn lại của phần này, các cách tiếp cận khác được mô tả hoạt động với khoảng cách của các điểm dữ liệu đến các trung tâm cụm gần nhất của chúng trong các luồng dữ liệu.

Một thuật toán phát hiện ngoại lệ mới, được gọi là AnyOut, đã được đề xuất để phát hiện các ngoại lệ trong truyền phát dữ liệu bất cứ lúc nào [7]. Ở đây, các luồng dữ liệu có tốc độ đến khác nhau và tại một thời điểm nhất định T, điểm ngoại lệ cho điểm dữ liệu hiện tại PT phải được tính cho đến khi điểm dữ liệu tiếp theo đến. Bất kỳ sự nào cũng tạo ra một cấu trúc cây cụ thể gọi là Clustree [7], phù hợp để phân cụm bất cứ lúc nào. Các tính năng cụm (CFS) được lưu trữ trong mỗi nút và bộ đệm để chèn các cụm bất cứ lúc nào được sử dụng. Bất kỳ điều gì kiểm tra Clustree từ trên xuống dưới và, ở mỗi cấp độ, tìm thấy CF đến gần nhất với điểm. Ngay sau khi điểm dữ liệu tiếp theo đến, điểm số ngoại lệ được tính là khoảng cách từ PT đến tính năng cụm tiếp theo của nó.[7]. Here, data streams have different arrival rates, and at a certain point in time t, the outlier score for the current data point pt should be calculated until the next data point arrives. AnyOut creates a specific tree structure called ClusTree [7], which is suitable for clustering at any time. Cluster Features (CFs) are stored in each node and a buffer for inserting clusters at any time is used. AnyOut examines the ClusTree from top to bottom and, at each level, finds the CF that comes closest to the point. As soon as the next data point arrives, an outlier score is calculated as the distance from pt to its next cluster feature centroid.

Trong [24], luồng dữ liệu được chia thành các khối dữ liệu và sử dụng M-MEAN cho từng khối dữ liệu. Sau đó, các điểm dữ liệu đủ xa khỏi các trung tâm cụm được xác định là ứng cử viên ngoại lệ. Do đó, giá trị ngoại lệ của các điểm dữ liệu có thể thay đổi tùy thuộc vào các khối dữ liệu sắp tới. Một cách tiếp cận khác đề xuất phân cụm hyperellipsoid để mô hình hóa hành vi bình thường của hệ thống trong đó các điểm dữ liệu bên ngoài giới hạn phân cụm này được phân loại là dị thường [41]. Các tham số hyperellipsoid (ma trận trung bình và hiệp phương sai) được cập nhật dần dần để theo dõi các thay đổi trong các phân phối cơ bản của luồng dữ liệu.[24], the data stream is divided into data blocks and uses k-means for each data block. Then data points far enough away from cluster centroids are identified as outlier “candidate”. Therefore, the outlier value of data points may change depending on the upcoming data blocks. Another approach proposes a hyperellipsoid clustering to model the system's normal behavior in which data points outside this clustering limit are classified as anomalies [41]. The hyperellipsoid parameters (mean and covariance matrix) are incrementally updated to track changes in data streams' underlying distributions.

Phương pháp ETSAD [43] là một thuật toán phân cụm mới mô hình các luồng dữ liệu bằng cách sử dụng một tập hợp các quy tắc hình elip mờ. Tương tự như phương pháp trước đó, các tham số mô hình phân cụm mờ được cập nhật cho mỗi điểm dữ liệu đến để xác định các ngoại lệ và thay đổi chế độ trong các luồng dữ liệu. Thay vì mô hình hóa các luồng dữ liệu chỉ bằng một tập hợp các cấu hình cụm và cập nhật chúng theo thời gian, [55] đã đề xuất một thuật toán dựa trên nhóm để phát triển các luồng dữ liệu trong đó một nhóm các mô hình cụm được tạo. Sau đó, một giá trị ngoại lệ được tính toán cho mỗi điểm dữ liệu đến dựa trên quyết định đồng thuận, chỉ sử dụng tập hợp các mô hình cụm có liên quan.[43] is a new clustering algorithm that models data streams using a set of fuzzy elliptic rules. Similar to the previous approach, the fuzzy clustering model parameters are updated for each incoming data point to identify outliers and regime changes in data streams. Instead of modeling data streams just by a set of cluster profiles and updating them over time, [55] proposed an ensemble-based algorithm for developing data streams in which a pool of clusters models is generated. After that, an outlier value is calculated for each incoming data point based on a consensus decision, using only the relevant set of cluster models.

Tương tự như [41], phương pháp phân cụm hyperellipsoidal được sử dụng để mô hình hóa hành vi dự kiến ​​của các luồng dữ liệu trong mỗi khối dữ liệu. Khoảng cách giữa các trung tâm cụm được sử dụng để phát hiện sự bất thường. Trong [17], một thuật toán tiết kiệm thời gian/bộ nhớ để phát hiện các dị thường đã được đề xuất, trong đó thuật ngữ hoạt động được giới thiệu. Các luồng dữ liệu đầu vào được chia thành các khối dữ liệu khác nhau và các cụm hoạt động trong khối dữ liệu hiện tại được xác định cho mỗi khối dữ liệu đến. Khi có các bản phân phối mới, một bản cập nhật theo mô hình, bao gồm một loạt các cụm hyperellipsoidal.[41], a hyperellipsoidal clustering approach is used to model the expected behavior of the data streams in each data block. The distance between the cluster centroids is used to detect anomalies. In [17], a time/memory-efficient algorithm for detecting anomalies was proposed, in which the term active cluster is introduced. The input data streams are divided into different data blocks, and active clusters in the current data block are identified for each incoming data block. When there are new distributions, an update follows the model, which consists of a series of hyperellipsoidal clusters.

Tất cả các thuật toán được đề cập trước đó phát hiện sự bất thường bằng cách mô hình hóa các luồng dữ liệu dựa trên phân cụm, nhưng không ai có thể xác định sự bất thường trong thời gian thực. Các tác giả trong [18] đề xuất một cách tiếp cận mới để khám phá sự phát triển tạm thời của các cụm và đồng thời, để phát hiện sự bất thường trong thời gian thực.[18] propose a new approach to discover the temporal development of clusters and, at the same time, to detect anomalies in real-time.

Những lợi thế chính của các kỹ thuật dựa trên phân cụm như sau:

1.

Các kỹ thuật dựa trên cụm có thể hoạt động ở chế độ không giám sát

2.

Chúng thường có thể được điều chỉnh với các loại dữ liệu phức tạp khác chỉ bằng cách chèn một thuật toán phân cụm để xử lý loại dữ liệu cụ thể.complex data types simply by inserting a clustering algorithm to handle the particular data type.

3.

Giai đoạn đánh giá cho các kỹ thuật dựa trên cụm là nhanh do số lượng nhỏ các cụm mà mỗi trường hợp thử nghiệm phải được so sánh.

Tuy nhiên, có một số nhược điểm của các kỹ thuật dựa trên phân cụm, như sau:

1.

Nhiều phương pháp phát hiện sự bất thường như là một sản phẩm phụ của phân cụm và do đó không được tối ưu hóa để phát hiện bất thường.

2.

Hiệu suất của các kỹ thuật dựa trên phân cụm phụ thuộc rất nhiều vào hiệu quả của thuật toán phân cụm trong việc nắm bắt cấu trúc cụm của các trường hợp bình thường.

3.

Nhiều thuật toán phân cụm buộc mỗi trường hợp được gán cho một cụm. Điều này có thể dẫn đến sự bất thường được gán cho một cụm lớn, khiến chúng làm cho chúng bình thường theo các kỹ thuật cho rằng sự bất thường không thuộc về bất kỳ cụm nào.

4.

Nhiều kỹ thuật dựa trên phân cụm chỉ có hiệu quả nếu các dị thường không hình thành các cụm đáng kể trong số đó.

5.

Độ phức tạp tính toán để phân cụm dữ liệu thường là một nút cổ chai, đặc biệt là khi sử dụng O (N2D) (N Số điểm dữ liệu được phân loại và chiều dài của từng điểm dữ liệu) thuật toán phân cụm.O(N2d) (N—number of data points to be categorized and d—dimensionality of each data point) clustering algorithms.

Đọc chương đầy đủ

URL: & nbsp; https: //www.sciencedirect.com/science/article/pii/b9780128238189000134

Một mô hình dữ liệu thống nhất để biểu diễn dữ liệu đa phương tiện, dòng thời gian và mô phỏng

John David N. Dionisio, Alfonso F. Cárdenas, trong các bài đọc trong Đa phương tiện và Mạng, 2002Readings in Multimedia Computing and Networking, 2002

trừu tượng

Bài viết này mô tả một mô hình dữ liệu thống nhất đại diện cho dữ liệu đa phương tiện, dòng thời gian và mô phỏng sử dụng một tập hợp các cấu trúc mô hình dữ liệu liên quan. Một mô hình thống nhất cho các loại đa phương tiện cấu trúc hình ảnh, âm thanh, video và dữ liệu văn bản dài một cách nhất quán, mang lại cho các lược đồ đa phương tiện và truy vấn một mức độ độc lập dữ liệu ngay cả đối với các loại dữ liệu phức tạp này. Thông tin sở hữu một yếu tố thời gian nội tại đều có thể được biểu diễn bằng cách sử dụng một cấu trúc gọi là luồng. Các luồng có thể được tổng hợp thành các đa loại song song, do đó cung cấp một cấu trúc để xem nhiều bộ thông tin dựa trên thời gian. Dòng thống nhất xây dựng cho phép các phép đo thời gian thực, dữ liệu mô phỏng số và trực quan hóa dữ liệu đó được tổng hợp và thao tác bằng cùng một bộ toán tử. Các nguyên mẫu dựa trên mô hình đã được thực hiện cho hai lĩnh vực ứng dụng y tế: ung thư ngực và liệu pháp cắt bỏ nhiệt của các khối u não. Các lược đồ mẫu, truy vấn và ảnh chụp màn hình từ các miền này được cung cấp. Cuối cùng, một tập hợp các ví dụ được bao gồm cho một ngôn ngữ truy vấn trực quan đi kèm được thảo luận chi tiết trong một tài liệu khác.complex data types. Information that possesses an intrinsic temporal element can all be represented using a construct called a stream. Streams can be aggregated into parallel multistreams, thus providing a structure for viewing multiple sets of time-based information. The unified stream construct permits real-time measurements, numerical simulation data, and visualizations of that data to be aggregated and manipulated using the same set of operators. Prototypes based on the model have been implemented for two medical application domains: thoracic oncology and thermal ablation therapy of brain tumors. Sample schemas, queries, and screenshots from these domains are provided. Finally, a set of examples is included for an accompanying visual query language discussed in detail in another document.

Đọc chương đầy đủ

URL: https://www.sciencedirect.com/science/article/pii/B9781558606517501212

Phát triển hướng đối tượng của phần mềm quang phổ tia X

Tuomas IHME, trong công nghệ hướng đối tượng và hệ thống điện toán tái thiết kế, 1999Object-Oriented Technology and Computing Systems Re-engineering, 1999

6.7 Kết luậnCONCLUSIONS

Các phương pháp đối tượng và SDT không hỗ trợ tất cả các quan điểm cần thiết của đặc tả yêu cầu hệ thống, định nghĩa kiến ​​trúc hệ thống và phân tích hệ thống con của bộ điều khiển đo SIXA. Các phương pháp chỉ hỗ trợ các tính năng của phân tích hướng đối tượng có thể dễ dàng được ánh xạ vào các thiết kế SDL. Tuy nhiên, hầu hết các mô hình đặc tả và phân tích thiết yếu có thể được mô hình hóa với các phương pháp này. Ngôn ngữ SDL rất phù hợp cho mô hình hành vi của bộ điều khiển đo SIXA. Mô hình hóa hành vi trạng thái với các máy trạng thái SDL và giao tiếp giữa các máy trạng thái với sơ đồ khối là tự nhiên. Những nhược điểm của SDL bao gồm hiệu quả kém của mã được tạo và hỗ trợ không đầy đủ cho kiểu dữ liệu phức tạp, thuật toán, mô tả giao diện phần cứng và đồng thời. Những thiếu sót này hạn chế việc sử dụng SDL để thiết kế và thực hiện hệ thống. Một số phần của hệ thống sẽ phải được thực hiện bằng các phương tiện khác ngoài SDL. Rất khó để áp dụng các nguyên tắc thiết kế hướng đối tượng tốt trong thiết kế SDL. Những lợi ích của công nghệ thiết kế hướng đối tượng chỉ có thể đạt được một phần. Các thí nghiệm với các công cụ ObjectGeode và SDT cho thấy các công cụ này rất hữu ích trong mô hình hóa hệ thống, mô phỏng và thử nghiệm. Lợi ích của khả năng mô phỏng và xác nhận rất thuyết phục đến mức việc sử dụng các công cụ này sẽ đáng để xem xét, ngay cả khi mã hóa cuối cùng phải được thực hiện thủ công do chất lượng kém của mã được tạo ra với các công cụ này. Các phương pháp đối tượng và SDT cũng như các phương pháp và công cụ hướng đối tượng khác cho phần mềm nhúng thời gian thực đang thay đổi mọi lúc và rất khó để biết phương pháp và công cụ nào cần chọn. Hầu hết các phương pháp tiếp cận vòng đời theo định hướng đối tượng đều hỗ trợ phát triển các hệ thống ứng dụng độc lập. Họ thường xem xét khả năng tái sử dụng mô hình giữa các hệ thống rất ít. Tuy nhiên, nếu một số hệ thống điều khiển liên quan sẽ được phát triển, việc tạo và thu được một tập hợp các thành phần, mẫu thiết kế và khung thiết kế có thể tái sử dụng. Do đó, có một trường hợp để phát triển một cách tiếp cận có hệ thống cho phần mềm nhúng do sử dụng lại.complex data type, algorithm, concurrency and hardware interface descriptions. These shortcomings restrict the use of SDL for system designing and implementation. Some parts of the system will have to be implemented by other means than SDL. It is difficult to apply good object-oriented design principles in SDL design. The benefits of the technology of object-oriented design can be only partially achieved. The experiments with the ObjectGEODE and SDT tools showed these tools to be very useful in system modelling, simulation and testing. The benefits of the simulation and validation capacities are so convincing that the use of these tools will be worth considering, even if the final coding had to be done manually due to the poor quality of the code generated with these tools. The ObjectGEODE and SDT methodologies as well as other object-oriented methods and tools for real-time embedded software are changing all the time and it is very difficult to know which method and tool to choose. Most object-oriented life cycle approaches support developing independent application systems. They generally consider the possibility of model reuse between systems very little. However, if several related control systems are to be developed, it often makes sense to create and acquire a set of reusable components, design patterns and frameworks. Thus, there is a case for developing a systematic approach for reuse-driven embedded software.

Đọc chương đầy đủ

URL: & nbsp; https: //www.sciencedirect.com/science/article/pii/b9781898563563500109

GPGPU: Điện toán đa năng trên GPU

Ying Tan, trong triển khai song song dựa trên GPU của các thuật toán thông minh Swarm, 2016Gpu-Based Parallel Implementation of Swarm Intelligence Algorithms, 2016

2.3.5 Thư viện

Bên cạnh ngôn ngữ lập trình dựa trên C, CUDA SDK cung cấp nhiều thư viện hữu ích.

2.3.5.1 Lực đẩy

Lực đẩy là thư viện mẫu C ++ cho CUDA dựa trên thư viện mẫu tiêu chuẩn (STL). Lực đẩy cho phép bạn thực hiện các ứng dụng song song hiệu suất cao với nỗ lực lập trình tối thiểu thông qua giao diện cấp cao hoàn toàn có thể tương tác với Cuda C.minimal programming effort through a high-level interface that is fully interoperable with CUDA C.

Lực đẩy cung cấp một bộ sưu tập phong phú các nguyên thủy song song dữ liệu như quét, sắp xếp và giảm, có thể được cấu thành cùng nhau để thực hiện các thuật toán phức tạp với mã nguồn ngắn gọn, có thể đọc được. Bằng cách mô tả tính toán của bạn theo các bản tóm tắt cấp cao này, bạn cung cấp lực đẩy tự do chọn cách thực hiện hiệu quả nhất. Do đó, lực đẩy có thể được sử dụng trong việc tạo mẫu nhanh các ứng dụng CUDA, nơi năng suất của lập trình viên quan trọng nhất, cũng như trong sản xuất, trong đó sự mạnh mẽ và hiệu suất tuyệt đối là rất quan trọng.

2.3.5.2 Cublas

Thư viện chương trình con đại số tuyến tính CUDA (CUBLAS) là phiên bản tăng tốc GPU của Thư viện Blas Standard BLAS hoàn chỉnh cung cấp hiệu suất nhanh hơn 6 × đến 17 × so với MKL Blas mới nhất. Cublas cung cấp hỗ trợ hoàn chỉnh cho tất cả các thói quen BLAS tiêu chuẩn với các loại dữ liệu phức tạp, gấp đôi, phức tạp và kép. Dựa trên các thói quen Blas tăng tốc GPU trong Thư viện Cublas, các triển khai Lapack không đồng nhất như Cula Tools và Magma cũng có sẵn.complex data types. Building on the GPU-accelerated BLAS routines in the cuBLAS library, heterogeneous LAPACK implementations such as CULA tools and MAGMA are also available.

2.3.5.3 Cufft

Biến đổi Fourier nhanh là một thuật toán hiệu quả để tính toán các biến đổi Fourier rời rạc của các bộ dữ liệu phức tạp hoặc có giá trị thực. Thư viện biến đổi Fourier Fast Fourier (CUFFT) của NVIDIA CUDA cung cấp một giao diện đơn giản để tính toán FFTS lên tới 10 × nhanh hơn. Cufft cung cấp API quen thuộc tương tự như giao diện nâng cao FFTW và các biến đổi 1D, 2D, 3D của các loại dữ liệu phức tạp và thực.

2.3.5.4 Curand

Số ngẫu nhiên được sử dụng rộng rãi trong khoa học máy tính và kỹ thuật. Thư viện CU-RAND cung cấp các cơ sở tập trung vào việc tạo ra các số giả và quasirandom chất lượng cao và hiệu quả. Nó có thể được sử dụng để tạo ra số lượng phân phối đồng đều ngẫu nhiên và nhiều phân phối không đồng nhất khác, chẳng hạn như Gaussian, Cauchy, Poison, v.v.

2.3.5.5 Cudnn

Cudnn là một thư viện nguyên thủy tăng tốc GPU cho các mạng lưới thần kinh sâu. Nvidia Cudnn được thiết kế để tích hợp vào các khung học máy cấp cao hơn, chẳng hạn như phần mềm Caffe phổ biến của UC Berkeley [81]. Nó được tối ưu hóa cho các kiến ​​trúc GPU NVIDIA và hỗ trợ tất cả các nhà khai thác liên quan đến mạng thần kinh chính. Thiết kế đơn giản, thả vào cho phép các nhà phát triển tập trung vào việc thiết kế và triển khai các mô hình mạng thần kinh thay vì điều chỉnh hiệu suất, trong khi vẫn đạt được phần cứng điện toán song song hiện đại hiệu suất cao.81]. It is optimized for NVIDIA GPU architectures and supports all major neural network related operators. The simple, drop-in design allows developers to focus on designing and implementing neural net models rather than tuning for performance, while still achieving the high-performance modern parallel computing hardware affords.

Ngoài các thư viện được mô tả ở trên, có một số lượng lớn các thư viện của bên thứ ba để lựa chọn. Các thư viện này bao gồm các trường đại số cơ bản, tính toán số, thống kê, xử lý hình ảnh, tầm nhìn máy, codec video, GIS, v.v. Số lượng và phạm vi của các thư viện này không ngừng tăng lên, những phát triển mới nhất có thể được tìm thấy trong [138].138].

Đọc chương đầy đủ

URL: https://www.sciencedirect.com/science/article/pii/B9780128093627500029

Vector hóa với AVX-512 Intrinsics

Jim Jeffers, ... Avinash Sodani, trong Intel Xeon PHI Processer Lập trình hiệu suất cao (Ấn bản thứ hai), 2016Intel Xeon Phi Processor High Performance Programming (Second Edition), 2016

Ví dụ từng bước sử dụng nội tại AVX-512

Trong phần này, chúng tôi đi qua một ví dụ tuyệt vời về lập trình với AVX-512 nội tại trên các hiệp sĩ hạ cánh từ một ứng dụng thực tế. Ví dụ này nhỏ gọn trong khi minh họa những gì một lập trình viên sáng tạo có thể làm để sử dụng toàn bộ sức mạnh của AVX-512.

Nội tại cho MILC

Chúng tôi sẽ xem xét cách thức và lý do tại sao chúng tôi sử dụng nội tại trong mã MILC. Mã MILC được NERSC cung cấp là một phần của bộ khối lượng công việc của Trinity (Chương 25). Nó đại diện cho một phần của một tập hợp các mã được viết bởi sự hợp tác tính toán mạng MIMD (MILC) được sử dụng để nghiên cứu sắc ký lượng tử (QCD), lý thuyết về các tương tác mạnh mẽ của vật lý hạ nguyên tử.Chapter 25). It represents part of a set of codes written by the MIMD Lattice Computation (MILC) collaboration used to study quantum chromodynamics (QCD), the theory of the strong interactions of subatomic physics.

Khi chúng tôi định cấu hình ứng dụng, chúng tôi đã xác định & nbsp; mult_adj_su3_mat_4vec & nbsp; thói quen là thói quen chính để tối ưu hóa. Xem xét một báo cáo tối ưu hóa trình biên dịch, cũng như kiểm tra mã lắp ráp, cho thấy mã không được vector hóa tốt. Mặc dù trình biên dịch dường như tránh vector hóa do các vấn đề định hướng con trỏ, chúng tôi cũng thấy rằng trình biên dịch không tận dụng thực tế là các phần thực và tưởng tượng của các số phức được đóng gói cùng nhau. Trình biên dịch C/C ++ không hiểu các loại dữ liệu phức tạp do người dùng xác định và do đó không tận dụng tính địa phương dữ liệu. Chúng tôi quyết định rằng con đường tốt nhất để vector hóa sẽ là tối ưu hóa tay và sử dụng nội tại. mult_adj_su3_mat_4vec routine to be the key routine to optimize. Reviewing a compiler optimization report, as well as examination of the assembly code, showed that the code is not vectorized well. While the compiler appears to avoid vectorizing due to pointer disambiguation issues, we also see that the compiler did not take advantage of the fact that the real and imaginary parts of complex numbers are packed together. C/C++ compilers do not understand user defined complex data types and thus do not take advantage of data-locality. We decided that the best route to vectorization will be hand optimization and use of intrinsics.

Các loại dữ liệu

& NBSP; SU3_RMD & NBSP; Loại dữ liệu ứng dụng là điểm nổi chính xác đơn và các loại dữ liệu được xác định chính của người dùng là: su3_rmd application data-type is single-precision floating point, and the key user defined data types are:

(1)

Phức hợp được xác định trong & nbsp; bao gồm \ phức hợp.h: include\complex.h:

/ * Định nghĩa số phức tạp chính xác chung */

/ * cụ thể cho phức hợp float */

typedef struct {& nbsp; 

& nbsp; float real; & nbsp;float real; 

& nbsp; float hình ảnh; & nbsp;float imag; 

} fcomplex; & nbsp; 

(2)

Su3_Matrix là một mảng gồm 3 & nbsp; × & nbsp; 3 yếu tố phức tạp. Được xác định trong & nbsp; bao gồm \ su3.h: include\su3.h:

typedef struct {fcomplex e [3] [3]; } fsu3_matrix;

#Define Su3_Matrix & nbsp; fsu3_matrix

(3)

Su3_Vector là một mảng gồm 3 yếu tố phức tạp. Được xác định trong & nbsp; bao gồm \ su3.h: include\su3.h:

typedef struct {fcomplex c [3]; } fsu3_Vector;

#Define Su3_Vector & NBSP; FSU3_VECTOR

Chức năng Mult_adj_su3_mat_4vec được xác định trong & nbsp; m_amv_4vec.c & nbsp; trong các thư viện phụ. Nó nhân lên một & nbsp; su3_vector & nbsp; bởi bốn người điều chỉnh & nbsp; su3_matrices & nbsp; dẫn đến bốn riêng biệt & nbsp; su3_vector. Mã được hiển thị trong Hình. 12,12 và 12.13.mult_adj_su3_mat_4vec function is defined in m_amv_4vec.c in the libraries sub-directory. It multiplies an su3_vector by four adjoint su3_matrices  resulting in four separate su3_vectors. The code is shown in Figs. 12.12 and 12.13.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.12. MULT_ADJ_SU3_MAT_4VEC.. mult_adj_su3_mat_4vec function.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.13. Cơ thể vòng lặp từ MULT_ADJ_SU3_MAT_4VEC.. Loop body from mult_adj_su3_mat_4vec.

Hiểu các hoạt động trong chức năng Mult_adj_su3_mat_4vec

Chúng tôi thấy rằng & nbsp; su3_matrix & nbsp; Hồi A có chứa ba vectơ và mỗi vectơ có 3 phần tử phức tạp. Đối với vòng lặp, vectơ đầu vào, Bọ luôn luôn không đổi và do đó có thể được nâng lên trên vòng lặp, do đó nó không được tính toán lại cho mọi lần lặp của vòng lặp. Chúng tôi tập trung vào vector hóa nội bộ của chức năng Mult Mult_adj_su3_mat_4vec. Chúng tôi quan sát rằng: su3_matrix “a” contains three vectors, and each vector has 3 complex elements. For the loop, the input vector “b” is always constant and hence can be hoisted above the loop, so it is not recomputed for every iteration of the loop. We focus on intraloop vectorization of the “mult_adj_su3_mat_4vec” function. We observe that:

(A)

Vectơ đầu vào, SRC, còn được gọi là vectơ bv bên trong hàm là không đổi.src” also known as vector “b” inside the function is constant.

(B)

Ma trận đầu vào Mat Mat Mat còn được gọi là ma trận A A bên trong hàm chứa bốn ma trận điều chỉnh. Vì vậy, có địa phương ở đây mà chúng ta có thể khai thác.mat” also known as matrix “a” inside the function contains four adjoint matrices. Thus, there is locality here which we can exploit.

(C)

Multiplication of complex numbers offers opportunities for reuse as we will see in our example.

We start by arranging to have three 512-bit vectors filled with a single element from the “b” vector as shown in Fig. 12.14. It is interesting to see that we have pairs of intrinsics that actually map into single instructions. This is slightly unusual as most intrinsics map to a single instruction. In this case, Knights Landing is able to combine _mm_loadu_si64 and _mm512_broadcastsd_pd into a single instruction because of AVX-512 embedded broadcast capabilities. As a programmer, we can write portable code while enjoying this optimization by the compiler. Fig. 12.15 shows the contents of the variables as they would appear in ZMM registers or memory with the lane numbers at the top. Grayed cells have unknown values. Logically, _mm_loadu_si64 loads into “lane 0” and _mm512_broadcastsd_pd broadcasts that single value into all 16 lanes.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,14. Điền vào các vectơ với các phần tử từ vector b.. Fill vectors with elements from the b vector.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.15. Các biến (zmm ​​như) từ các tải ban đầu từ vector b.. Variables (ZMM like) from the initial loads from vector b.

Kiểm tra loại thời gian biên dịch nội tại

Lưu ý rằng loại đầu ra của tải là SI SI64 (tham khảo Hình 12.1) theo quy định của hậu tố trên tên nội tại. Trình biên dịch sẽ giúp chúng tôi theo dõi loại đó và sẽ không cho phép đầu ra được sử dụng làm tham số không rõ ràng là SI SI64, trừ khi chúng tôi sử dụng dàn diễn viên rõ ràng. Các diễn viên rõ ràng như vậy không tạo ra hướng dẫn và không có chi phí. Chúng chỉ được yêu cầu để kích hoạt kiểm tra loại thời gian biên dịch, từ đó giúp bắt lỗi lập trình. Hình. Vì lý do lịch sử, không có _MM_CASTSI64_PD & NBSP; mặc dù đó có vẻ là dàn diễn viên hoàn hảo để lựa chọn. Trên thực tế, có vẻ như _MM_CASTSI64_SD & NBSP; sẽ cần thiết với những gì phát sóng thực sự làm. Cả _MM_CASTSI64_PD & nbsp; cũng không phải _MM_CASTSI64_SD & NBSP; tồn tại dưới dạng hoạt động diễn viên, do đó, có một chút thử nghiệm và lỗi tìm ra dàn diễn viên hoàn hảo để làm cho trình biên dịch hài lòng. Bảng, trong Hình. 12,17 Từ12.19, Danh sách các nội tại đúc có sẵn. Tất nhiên, chúng tôi thực sự đang di chuyển xung quanh các số phức tạp chính xác và gọi chúng là 64 người (SI64) hoặc nhân đôi được đóng gói (PD) vì C/C ++ không có các loại dữ liệu phức tạp tích hợp.si64” (consult Fig. 12.1) as specified by the suffix on the intrinsic name. The compiler will help us track that type and will not allow the output to be used as a parameter that is not explicitly “si64” unless we use an explicit cast. Such explicit casts do not generate instructions and have no cost. They are only required to enable compile time type checking which in turn help catch programming errors. Fig. 12.16 shows that the broadcast intrinsic will expect a packed double, so we need to cast the si64 into a packed double type with _mm_castsi128_pd. For historic reasons, there is no _mm_castsi64_pd even though that might seem to be the perfect cast to choose. Actually, it would seem like _mm_castsi64_sd would be needed given what broadcast actually does. Neither _mm_castsi64_pd nor _mm_castsi64_sd exists as cast operations, so there is a little bit of trial and error figuring out the perfect cast to make the compiler happy. Tables, in Figs. 12.17–12.19, list casting intrinsics that are available. Of course, we are actually moving around single-precision complex numbers and calling them 64-integers (si64) or packed doubles (pd) because C/C++ does not have complex data types built-in.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.16. Định nghĩa phát sóng từ Hướng dẫn nội tại Intel (trực tuyến).. Broadcast definition from the Intel Intrinsics Guide (online).

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,17. Đúc nội tại dẫn đến số nguyên.. Casting intrinsics resulting in integers.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,18. Đúc nội tại dẫn đến phao.. Casting intrinsics resulting in floats.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.19. Đúc nội tại dẫn đến nhân đôi.. Casting intrinsics resulting in doubles.

Trước đây, chúng tôi đã đề cập với quan sát của chúng tôi C rằng có cơ hội tái sử dụng. Hình 12.20 có mã để tạo các giá trị mà chúng ta có thể sử dụng lại. & Nbsp; _mm512_permute_ps & nbsp; nội tại hoán vị các giá trị giữa các làn trong mỗi bộ của bốn làn. Chẳng hạn, nhóm đầu tiên của các hoán vị chỉ tìm cách kết thúc với các thành phần thực trong tất cả các làn đường. Đầu ra nội tại Một giá trị trong làn 1 với giá trị đầu vào từ làn 0. Tương tự như vậy, nội tại sẽ xuất các giá trị trong làn 3 từ giá trị đầu vào trong làn 2. Một hoán vị được chỉ định thông qua bốn số mỗi số 0. 01, 10 hoặc 11) trong giá trị được chỉ định & nbsp; 0b10100000. Điều này đơn giản có nghĩa là các làn 3, 2, 1, 0 sẽ nhận được các giá trị từ các làn 2, 2, 0, 0, tương ứng. Logic tương tự này được lặp lại cho các nhóm bốn làn khác sử dụng cùng một toán nhưng +& nbsp; 4, +& nbsp; 8 và +& nbsp; 12.Fig. 12.20 has code to create values we can reuse. The _mm512_permute_ps intrinsics permute values between lanes within each set of four lanes. For instance, the first group of permutes seeks to end up only with the real components in all lanes. The intrinsic outputs a value in lane 1 with the input value from lane 0. Likewise, the intrinsic will output values in lane 3 from the input value in lane 2. A permutation is specified via four numbers each 0–4 (i.e., 00, 01, 10, or 11) in the specified value 0b10100000. This simply means that lanes 3, 2, 1, 0 will get the values from lanes 2, 2, 0, 0, respectively. This same logic is repeated for the other groups of four lanes using the same math but + 4, + 8, and + 12.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.20. Tạo hoán vị của các giá trị từ B sẽ được sử dụng lại.. Create permutations of values from b which will be reused.

Chúng tôi đã sẵn sàng để tải các ma trận của A A (chúng tôi dán nhãn chúng là M0, M1, M2, M3 trong các hình của chúng tôi). Có bốn ma trận của A A A mà hàm (Hình 12.12) bước qua. Mỗi ma trận có kích thước 3 & nbsp; × & nbsp; 3 và do đó chứa ba vectơ mỗi vectơ có ba số phức. Chúng ta cần ba vectơ từ ma trận được sắp xếp (thực sự là một chuyển đổi SOA sang AOS) thành ba thanh ghi khác nhau của ZMM để chuẩn bị cho các phép hợp với vectơ vectơ b. Một vectơ có ba số phức thực sự chỉ có kích thước 192 bit (32 bit/đơn & nbsp; × & nbsp; 2 đơn/phức tạp & nbsp; × & nbsp; 3 phức tạp/vector). Điều này có nghĩa là một vectơ ngắn như vậy có thể phù hợp hoàn toàn trong một làn đường 256 bit. Sự sắp xếp này được thể hiện trong hình 12,21.Fig. 12.12) steps through. Each matrix is 3 × 3 in size and therefore contains three vectors each with three complex numbers. We need the three vectors from the matrix arranged (effectively an SoA to AoS conversion) into three different “ZMM” registers to prepare for the mulitplications with vector “b.” A vector of three complex numbers is actually only 192 bits in size (32 bits/single × 2 singles/complex × 3 complex/vector). This means that such a short vector can fit entirely within a 256 bit “lane.” This arrangement is shown in Fig. 12.21.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,21. Đóng gói 36 số phức thành sáu biến 512 bit ZMM.. Packing of 36 complex numbers into six 512-bit “ZMM” variables.

Để đạt được bao bì được hiển thị trong Hình 12,21, với một ma trận nhất định, trước tiên chúng tôi sẽ tải hai trong số các vectơ vào thanh ghi/biến ZMM, sử dụng & nbsp; alignr & nbsp; hướng dẫn trên thanh ghi ban đầu để đưa vectơ thứ hai vào làn đường trên 256b và Cuối cùng hợp nhất các thanh ghi từ các hoạt động thứ nhất và thứ hai sao cho chúng tôi có vectơ đầu tiên ở làn thấp và vectơ thứ hai trong làn đường cao. Sử dụng & nbsp; alignr & nbsp; với các đầu vào giống hệt nhau cho phép chúng tôi thực hiện một hoạt động xoay một cách hiệu quả. Mã cho cặp High 256B/Low 256B đầu tiên được hiển thị trong Hình 12.22 và mã bổ sung (không hiển thị) sử dụng cùng một chuỗi trên các dữ liệu khác nhau. Mã hoàn chỉnh có sẵn trực tuyến miễn phí, xem để biết thêm thông tin ở cuối chương này. Hình 12.23 cho thấy các giá trị kết quả và các tế bào màu xám cho biết các tế bào được tải nhưng chúng tôi không quan tâm. Chúng tôi có thể đã sử dụng tải trọng đeo mặt nạ để giới hạn tải trong trường hợp đó các giá trị đó sẽ bị bỏ lại từ các nội dung trước của thanh ghi. Tải trọng đeo mặt nạ sẽ bắt chước tốt hơn mã gốc bằng cách không truy cập dữ liệu ngoài ma trận đầu vào cuối cùng. Trong trường hợp này, lập trình viên không lo ngại rằng phạm vi tiếp cận thêm là một vấn đề. Dù bằng cách nào, các giá trị không quan tâm đến chúng tôi mặc dù chúng sẽ tham gia vào các hoạt động toán học trong tương lai trên thanh ghi 512 bit đầy đủ.Fig. 12.21, for a given matrix we will first load two of the vectors into a ZMM register/variable, use an alignr instruction on the original register to get the second vector into upper 256b lane, and finally merge the registers from the first and second operations such that we have the first vector in the low lane and the second vector in the high lane. Using the alignr with identical inputs allows us to effectively do a rotate operation. The code for the first High-256b/Low-256b pair is shown in Fig. 12.22, and additional code (not shown) uses the same sequence on different data. The complete code is freely available online, see For More Information at the end of this chapter. Fig. 12.23 shows the resulting values, and the grayed cells indicate cells that were loaded but we do not care about. We could have used a masked load to limit the loading in which case those values would have been left over from the prior contents of the register. A masked load would better imitate the original code by not accessing data beyond the last input matrix. In this case, the programmer was not concerned that the extra reach was an issue. Either way, the values are of no interest to us even though they will participate in future mathematical operations on the full 512-bit register.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,22. Đang tải Z_A_01_00 theo hình 12,21.. Loading z_a_01_00 according to Fig. 12.21.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,23. Tải tất cả các ZMM theo hình 12,21.. Loading all ZMMs according to Fig. 12.21.

Tiếp theo, chúng tôi thực hiện chuyển đổi từ AOS sang SOA để chúng sẵn sàng nhân với vector. Sự sắp xếp thông minh này phù hợp trong một làn đường 256 bit duy nhất và sử dụng rất nhiều AVX-512. Mã được hiển thị trong Hình 12.24 và các giá trị từng bước trong các thanh ghi ZMM được hiển thị trong Hình 12.25. Tiếp theo, đối với nhân phức, chúng ta cần các thành phần thực và tưởng tượng được hoán đổi như trong Hình 12.26 với kết quả được hiển thị trong Hình 12.27.Fig. 12.24, and the step-by-step values in the ZMM registers are shown in Fig. 12.25. Next, for Complex multiply, we need the real and imaginary components swapped as shown in Fig. 12.26 with results shown in Fig. 12.27.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.24. Chuyển đổi AOS sang SOA thông qua nội tại.. AoS to SoA transformation via intrinsics.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,25. Các phép biến đổi AOS đến SOA trong các thanh ghi ZMM.. AoS to SoA transformations in the ZMM registers.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,26. Trao đổi các phần thực và tưởng tượng.. Swapping the real and imaginary parts.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.27. Các phần thực và tưởng tượng hiện đang hoán đổi trong các thanh ghi ZMM.. The real and imaginary parts are now swapping in the ZMM registers.

Bây giờ chúng tôi đã sẵn sàng để tính toán phức hợp vector-vector bằng cách sử dụng một vectơ từ ma trận (M0 M3 M3) và một vectơ có nguồn gốc từ vectơ B B B. Lưu ý rằng các thành phần thực và tưởng tượng được tính toán là:

Phần tưởng tượngCó thật
M.Real * B.ImagM.Imag * B.Imag
dấu trừ thêm
M.Imag * B.RealM.Real * B.Real

Chúng ta có thể sử dụng một hướng dẫn FMA có tên là Vfmsubadd, trong đó các phép trừ trong các làn đường lẻ và bổ sung trong các làn đường chẵn. Tài liệu hướng dẫn sẽ lưu ý rằng có ba phiên bản của hướng dẫn, để cho phép các đơn đặt hàng và loại toán hạng khác nhau, cụ thể là, & nbsp; vfmsubadd132ps, & nbsp; vfmsubadd213ps, & nbsp; và & nbsp; vfmsubadd231ps. Vì chúng tôi đang sử dụng nội tại, chúng tôi có thể bỏ qua các sự tinh tế của các hướng dẫn đăng ký thứ tự và bộ nhớ của bộ nhớ và chỉ cần tập trung vào FM FMUBADD với nội tại & NBSP; _MM512_FMSUBADD_PS & NBSP;vfmsubadd” which does subtractions in the odd lanes and additions in the even lanes. The instruction documentation will note that there are three versions of the instruction, to allow different orders and types of operands, namely, vfmsubadd132ps, vfmsubadd213ps, and vfmsubadd231ps. Since we are using intrinsics, we can ignore the subtleties of operand ordering and memory verses register instructions and simply focus on “fmsubadd” with the intrinsic _mm512_fmsubadd_ps as shown in Fig. 12.28 with results shown in Fig. 12.29.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,28. Nội tại để tính toán hoạt động bằng cách sử dụng Vfmsubadd.. Intrinsics for compute operation using “vfmsubadd.”

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12,29. Các thanh ghi ZMM khi chúng tôi thực hiện thao tác tính toán bằng cách sử dụng Vfmsubadd.. ZMM registers as we do the compute operation using “vfmsubadd.”

Cuối cùng, chúng ta cần thêm trên các vectơ để có được kết quả như trong mã trong Hình 12.30 và lưu trữ kết quả trong bốn vectơ riêng biệt. Lưu ý rằng mỗi vectơ kết quả có ba số phức trong đó. Chúng ta cần giới hạn các cửa hàng của mình, thông qua mặt nạ, chỉ viết sáu yếu tố chính xác thấp nhất do đó một mặt nạ chỉ có sáu bit thấp hơn (tức là, 0x003F). Vì một nửa các vectơ kết quả nằm ở phần trên 256-bit của các thanh ghi ZMM, chúng tôi sử dụng _MM512_exTractF64x4_PD & nbsp; để di chuyển chúng vào 256 bit thấp hơn trước khi lưu trữ. Mã được hiển thị trong Hình 12.31.Fig. 12.30 and store the results in the four distinct vectors. Note that each result vector has three complex numbers in it. We need to limit our stores, via masking, to only write the lowest six single-precision elements hence a mask with only the lower six bits on (i.e., 0x003F). Since half the resulting vectors are in the upper 256-bits of the ZMM registers, we use _mm512_extractf64x4_pd to move them into the lower 256-bits before storing. The code is shown in Fig. 12.31.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.30. Thêm trên các vectơ để có được kết quả.. Add across the vectors to get the results.

Hướng dẫn what does complex data type mean in python? - kiểu dữ liệu phức tạp có nghĩa là gì trong python?

Hình 12.31. Viết ra các vectơ đích.. Write out the destination vectors.

Đọc chương đầy đủ

URL: https://www.sciencedirect.com/science/article/pii/B9780128091944000120

Loại dữ liệu phức tạp có nghĩa là gì?

Một loại dữ liệu phức tạp thường là một tổng hợp của các loại dữ liệu hiện có khác. Ví dụ: bạn có thể tạo một loại dữ liệu phức tạp có các thành phần bao gồm các loại tích hợp, loại mờ, loại riêng biệt hoặc các loại phức tạp khác.usually a composite of other existing data types. For example, you might create a complex data type whose components include built-in types, opaque types, distinct types, or other complex types.

Tại sao loại dữ liệu phức tạp được sử dụng trong Python?

Một số phức có hai phần, phần thực và phần tưởng tượng.Các số phức được biểu diễn dưới dạng A+Bi hoặc A+BJ, trong đó A là phần thực và B là phần tưởng tượng.Python hỗ trợ kiểu dữ liệu phức tạp là tính năng tích hợp, có nghĩa là chúng tôi có thể trực tiếp thực hiện các hoạt động khác nhau trên số phức trong Python.we can directly perform different operations on complex number in python.

Có nghĩa là gì bởi số lượng phức tạp trong Python?

Một số phức được tạo từ các số thực.Số phức Python có thể được tạo bằng cách sử dụng câu lệnh gán trực tiếp hoặc bằng cách sử dụng hàm phức tạp ().Các số phức tạp hầu hết được sử dụng ở nơi chúng tôi đang sử dụng hai số thực.created from real numbers. Python complex number can be created either using direct assignment statement or by using complex () function. Complex numbers which are mostly used where we are using two real numbers.

Ví dụ dữ liệu phức tạp là gì?

Ví dụ về các loại dữ liệu phức tạp là hóa đơn của vật liệu, tài liệu xử lý văn bản, bản đồ, chuỗi thời gian, hình ảnh và video.bills of materials, word processing documents, maps, time-series, images and video.