Gọi Python từ Octave

Octave là một ngôn ngữ thông dịch cấp cao, chủ yếu dành cho các tính toán số. Nó cung cấp các khả năng cho giải pháp số của các vấn đề tuyến tính và phi tuyến tính, và để thực hiện các thí nghiệm số khác. Nó cũng cung cấp các khả năng đồ họa mở rộng để trực quan hóa và thao tác dữ liệu

Khi bạn muốn sử dụng mã được viết bằng ngôn ngữ khác, Octave cung cấp giao diện mã bên ngoài có thể được sử dụng cho tiện ích mở rộng. Đối với các tiện ích mở rộng, các ngôn ngữ C++, C và Fortran được hỗ trợ và Octave có thể gọi mã C/C++ bên ngoài thông qua giao diện tệp oct gốc của nó

Hiện tại không có cầu nối giữa Octave và Python và mục tiêu của tiện ích mở rộng pyoctave là thu hẹp khoảng cách này. Với tiện ích mở rộng này, có thể sử dụng toàn bộ sức mạnh của Python cho Octave như xử lý văn bản, phân tích cú pháp, v.v.

bước

Trước khi bạn có thể cài đặt và sử dụng pyoctave, hãy đảm bảo rằng tất cả các phụ thuộc cần thiết đã được đáp ứng để biên dịch tiện ích mở rộng. Thông thường, đây phải là trường hợp cài đặt Linux tiêu chuẩn. Nếu một số bước sau không thành công, bạn nên kiểm tra sự phụ thuộc

Đối với Ubuntu 14. 10 gói cần thiết có thể được cài đặt bằng các lệnh sau

sudo apt-get update
sudo apt-get install git build-essentials python-all-dev liboctave-dev

Biên dịch các nguồn

Đầu tiên, lấy các nguồn và biên dịch phần mở rộng

git clone git://github.com/daniel-e/pyoctave.git
cd pyoctave
CXXFLAGS="-std=c++11 -g -O3" make

Khi thành công, một tệp có tên runpy.oct sẽ tồn tại, được gọi bởi Octave khi bạn muốn thực thi mã Python

quãng tám

Bắt đầu quãng tám như sau

octave -p .

Tùy chọn -p được sử dụng để thêm đường dẫn hiện tại vào đường dẫn tìm kiếm chức năng của Octave. Đây là danh sách các thư mục mà Octave đang tìm kiếm tiện ích mở rộng. Tiện ích mở rộng sử dụng đường dẫn này để tìm kiếm các đường dẫn này cho các mô-đun Python

Ngoài ra, bạn có thể sử dụng lệnh Octave addpath() để thêm thư mục vào đường dẫn tìm kiếm chức năng

Chạy tập lệnh Python

Bây giờ, bạn có thể gõ help runpy vào Octave để nhận trợ giúp cho hàm runpy

Để chạy ví dụ Python, một phần của loại phân phối pyoctave

octave:1> v = runpy("pyexample", "counter", "10")
v =

   0
   1
   2
   3
   4
   5
   6
   7
   8
   9

Lệnh này thực thi hàm counter trong mô-đun

git clone git://github.com/daniel-e/pyoctave.git
cd pyoctave
CXXFLAGS="-std=c++11 -g -O3" make
0 với đối số 10 trả về một vectơ có số từ 0 đến 10

Bây giờ, bạn có thể làm việc với vectơ này trong Octave như bình thường. Ví dụ: bạn có thể tạo ma trận 5 nhân 2 bằng lệnh

git clone git://github.com/daniel-e/pyoctave.git
cd pyoctave
CXXFLAGS="-std=c++11 -g -O3" make
1

Khoa học dữ liệu là một lĩnh vực kiến ​​thức bao gồm các ngôn ngữ lập trình. Một số nổi tiếng với việc giải quyết các vấn đề trong không gian này, trong khi những người khác ít được biết đến hơn. Bài viết này sẽ giúp bạn làm quen với việc làm khoa học dữ liệu với một số ngôn ngữ phổ biến

Chọn Python và GNU Octave cho khoa học dữ liệu

Thỉnh thoảng, tôi cố gắng học một ngôn ngữ lập trình mới. Tại sao? . Khi tôi bắt đầu lập trình, ngôn ngữ duy nhất tôi biết là C. Cuộc sống trong những năm đó thật khó khăn và nguy hiểm, vì tôi phải cấp phát bộ nhớ theo cách thủ công, quản lý con trỏ và ghi nhớ để giải phóng bộ nhớ

Sau đó, một người bạn đề nghị tôi dùng thử Python và cuộc sống trở nên dễ dàng hơn nhiều. Các chương trình trở nên chậm hơn nhiều, nhưng tôi không phải khổ sở viết phần mềm phân tích. Tuy nhiên, tôi sớm nhận ra rằng mỗi ngôn ngữ phù hợp hơn các ngôn ngữ khác cho một số ứng dụng. Sau đó, tôi đã học một số ngôn ngữ khác, và mỗi ngôn ngữ đều mang lại một chút giác ngộ mới. Khám phá các phong cách lập trình mới cho phép tôi nhập một số giải pháp sang các ngôn ngữ khác và mọi thứ trở nên thú vị hơn nhiều

Lập trình và phát triển

  • Blog nhà phát triển mũ đỏ
  • Lập trình cheat sheet
  • Thử miễn phí. Đăng ký học Red Hat
  • sách điện tử. Giới thiệu về lập trình với Bash
  • Bash Shell Scripting Cheat Sheet
  • sách điện tử. Hiện đại hóa doanh nghiệp Java

Để cảm nhận một ngôn ngữ lập trình mới (và tài liệu của nó), tôi luôn bắt đầu bằng cách viết một số chương trình mẫu thực hiện một nhiệm vụ mà tôi biết rõ. Cuối cùng, tôi sẽ giải thích cách viết chương trình bằng Python và GNU Octave cho một tác vụ cụ thể mà bạn có thể phân loại là khoa học dữ liệu. Nếu bạn đã quen thuộc với một trong các ngôn ngữ, hãy bắt đầu với ngôn ngữ đó và xem qua các ngôn ngữ khác để tìm điểm tương đồng và khác biệt. Nó không nhằm mục đích so sánh toàn diện các ngôn ngữ, chỉ là một giới thiệu nhỏ

Tất cả các chương trình đều được chạy trên dòng lệnh, không phải với giao diện người dùng đồ họa (GUI). Các ví dụ đầy đủ có sẵn trong kho lưu trữ polyglot_fit

Nhiệm vụ lập trình

Chương trình bạn sẽ viết trong loạt bài này

  • Đọc dữ liệu từ tệp CSV
  • Nội suy dữ liệu với một đường thẳng (i. e. , f(x)=m ⋅ x + q)
  • Vẽ kết quả vào một tệp hình ảnh

Đây là một tình huống phổ biến mà nhiều nhà khoa học dữ liệu đã gặp phải. Dữ liệu ví dụ là bộ tứ đầu tiên của Anscombe, được hiển thị trong bảng bên dưới. Đây là một tập hợp dữ liệu được xây dựng nhân tạo cho kết quả giống nhau khi được gắn với một đường thẳng, nhưng các biểu đồ của chúng rất khác nhau. Tệp dữ liệu là một tệp văn bản có các tab làm dấu phân cách cột và một vài dòng làm tiêu đề. Nhiệm vụ này sẽ chỉ sử dụng bộ đầu tiên (i. e. , hai cột đầu tiên)

Bộ tứ Anscombe

IIIIIIIVxyxyxyxy10. 08. 0410. 09. 1410. 07. 468. 06. 588. 06. 958. 08. 148. 06. 778. 05. 7613. 07. 5813. 08. 7413. 012. 748. 07. 719. 08. 819. 08. 779. 07. 118. 08. 8411. 08. 3311. 09. 2611. 07. 818. 08. 4714. 09. 9614. 08. 1014. 08. 848. 07. 046. 07. 246. 06. 136. 06. 088. 05. 254. 04. 264. 03. 104. 05. 3919. 012. 5012. 010. 8412. 09. 1312. 08. 158. 05. 567. 04. 827. 07. 267. 06. 428. 07. 915. 05. 685. 04. 745. 05. 738. 06. 89

Con đường của Python

Python là ngôn ngữ lập trình có mục đích chung, nằm trong số các ngôn ngữ phổ biến nhất được sử dụng hiện nay (bằng chứng là những phát hiện từ chỉ số TIOBE, Xếp hạng ngôn ngữ lập trình RedMonk, Chỉ số ngôn ngữ lập trình phổ biến, Trạng thái Octoverse của GitHub và các nguồn khác). Nó là một ngôn ngữ được giải thích; . Nó có một thư viện tiêu chuẩn toàn diện và nói chung là rất dễ sử dụng (tôi không có tài liệu tham khảo cho tuyên bố cuối cùng này; đó chỉ là ý kiến ​​​​khiêm tốn của tôi)

Cài đặt

Để phát triển với Python, bạn cần trình thông dịch và một vài thư viện. Các yêu cầu tối thiểu là

  • NumPy để thao tác mảng và ma trận thuận tiện
  • SciPy cho tính toán khoa học
  • Matplotlib để vẽ đồ thị

Cài đặt chúng trong Fedora thật dễ dàng

sudo dnf install python3 python3-numpy python3-scipy python3-matplotlib

bình luận mã

Trong Python, nhận xét đạt được bằng cách đặt dấu # ở đầu dòng và phần còn lại của dòng sẽ bị trình thông dịch loại bỏ

# This is a comment ignored by the interpreter.

phụ kiện_python. ví dụ py sử dụng nhận xét để chèn thông tin cấp phép vào mã nguồn và dòng đầu tiên là nhận xét đặc biệt cho phép thực thi tập lệnh trên dòng lệnh

________số 8_______

Dòng này thông báo cho trình thông dịch dòng lệnh rằng tập lệnh cần được thực thi bởi chương trình python3

thư viện cần thiết

Các thư viện và mô-đun có thể được nhập vào Python dưới dạng một đối tượng (như trong dòng đầu tiên trong ví dụ) với tất cả các chức năng và thành viên của thư viện. Có một tùy chọn thuận tiện để đổi tên chúng bằng nhãn tùy chỉnh bằng cách sử dụng đặc tả as

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

Bạn cũng có thể quyết định chỉ nhập một mô hình con (như trong dòng thứ hai và thứ ba). Cú pháp có hai tùy chọn tương đương (ít nhiều). mô-đun nhập khẩu. mô hình con và từ mô hình con nhập mô-đun

Định nghĩa biến

Các biến của Python được khai báo lần đầu tiên khi một giá trị được gán cho chúng

input_file_name = "anscombe.csv"
delimiter = "\t"
skip_header = 3
column_x = 0
column_y = 1

Các loại biến được suy ra bởi giá trị được gán cho biến. Không có biến nào có giá trị không đổi trừ khi chúng được khai báo trong mô-đun và chỉ có thể được đọc. Thông thường, các biến không nên sửa đổi nên được đặt tên bằng chữ hoa

Sản lượng in

Chạy các chương trình thông qua dòng lệnh có nghĩa là đầu ra chỉ được in trên thiết bị đầu cuối. Theo mặc định, Python có chức năng in đối số của nó và thêm một dòng mới vào cuối đầu ra

print("#### Anscombe's first set with Python ####")

Có thể kết hợp hàm print() với lớp string trong Python. Các chuỗi có phương thức định dạng có thể được sử dụng để thêm một số văn bản được định dạng vào chính chuỗi đó. Chẳng hạn, có thể thêm một số float được định dạng, e. g

print("Slope: {:f}".format(slope))

Đọc dữ liệu

Đọc các tệp CSV rất dễ dàng với NumPy và hàm genfromtxt(), tạo ra một mảng NumPy

data = np.genfromtxt(input_file_name, delimiter = delimiter, skip_header = skip_header)

Trong Python, một hàm có thể có số lượng đối số khác nhau và bạn có thể yêu cầu hàm đó chuyển một tập hợp con bằng cách chỉ định các đối số mong muốn. Mảng là các đối tượng giống như ma trận rất mạnh có thể dễ dàng cắt thành các mảng nhỏ hơn

x = data[:, column_x]
y = data[:, column_y]

Dấu hai chấm chọn toàn bộ phạm vi và chúng cũng có thể được sử dụng để chọn một phạm vi con. Chẳng hạn, để chọn hai hàng đầu tiên của mảng, bạn sẽ sử dụng

first_two_rows = data[0:1, :]

lắp dữ liệu

SciPy cung cấp các chức năng thuận tiện để khớp dữ liệu, chẳng hạn như chức năng linregress(). Hàm này cung cấp một số giá trị quan trọng liên quan đến sự phù hợp, chẳng hạn như độ dốc, hệ số chặn và hệ số tương quan của hai bộ dữ liệu

# This is a comment ignored by the interpreter.
0

Vì linregress() cung cấp nhiều thông tin nên kết quả có thể được lưu vào nhiều biến cùng một lúc

âm mưu

Thư viện Matplotlib chỉ vẽ các điểm dữ liệu; . Các mảng x và y đã được xác định, vì vậy bạn có thể trực tiếp vẽ chúng, nhưng bạn cũng cần các điểm dữ liệu sẽ biểu thị đường thẳng

# This is a comment ignored by the interpreter.
1

Hàm linspace() thuận tiện tạo ra một tập hợp các giá trị cách đều nhau giữa hai giá trị. Các tọa độ có thể được tính toán dễ dàng bằng cách khai thác các mảng NumPy mạnh mẽ, có thể được sử dụng trong một công thức như thể chúng là các biến số thông thường

# This is a comment ignored by the interpreter.
2

Công thức được áp dụng từng phần tử trên mảng;

Để tạo cốt truyện, trước tiên, hãy xác định một ô sẽ chứa tất cả các đồ họa

# This is a comment ignored by the interpreter.
3

Một số đồ thị có thể được vẽ trên một hình; . Ví dụ này xác định một đối tượng trục đơn để vẽ các điểm dữ liệu

# This is a comment ignored by the interpreter.
4

Lưu hình vào tệp hình ảnh PNG với

# This is a comment ignored by the interpreter.
5

Nếu bạn muốn hiển thị (thay vì lưu) cốt truyện, hãy gọi

# This is a comment ignored by the interpreter.
6

Ví dụ này tham chiếu tất cả các đối tượng được sử dụng trong phần vẽ đồ thị. nó xác định đối tượng fig và đối tượng rìu. Tính kỹ thuật này là không cần thiết vì đối tượng plt có thể được sử dụng trực tiếp để vẽ biểu đồ tập dữ liệu. Màn hình hiển thị một giao diện như

# This is a comment ignored by the interpreter.
7

Thành thật mà nói, tôi không thích cách tiếp cận này vì nó che giấu những tương tác không tầm thường xảy ra giữa các đối tượng khác nhau. Thật không may, đôi khi các ví dụ chính thức hơi khó hiểu vì chúng có xu hướng sử dụng các cách tiếp cận khác nhau. Tham chiếu các đối tượng đồ họa là không cần thiết trong ví dụ đơn giản này, nhưng nó trở nên quan trọng trong các đối tượng phức tạp hơn (chẳng hạn như khi nhúng các biểu đồ trong GUI)

Kết quả

Đầu ra trên dòng lệnh là

# This is a comment ignored by the interpreter.
8

Đây là hình ảnh mà Matplotlib tạo ra

Gọi Python từ Octave

Cách GNU Octave

Ngôn ngữ GNU Octave chủ yếu dành cho tính toán số. Nó cung cấp một cú pháp đơn giản để thao tác với các vectơ và ma trận và có một số phương tiện vẽ đồ thị mạnh mẽ. Nó là một ngôn ngữ được giải thích như Python. Vì cú pháp của Octave là với MATLAB nên nó thường được mô tả là một giải pháp thay thế miễn phí cho MATLAB. Octave không được liệt kê trong số các ngôn ngữ lập trình phổ biến nhất, nhưng MATLAB thì có, vì vậy Octave khá phổ biến theo một nghĩa nào đó. MATLAB có trước NumPy và tôi có cảm giác rằng nó được lấy cảm hứng từ cái trước. Trong khi xem qua ví dụ, bạn sẽ thấy sự tương đồng

Cài đặt

Bộ phù hợp_quãng tám. m ví dụ chỉ cần gói Octave cơ bản, khiến việc cài đặt trong Fedora khá đơn giản

# This is a comment ignored by the interpreter.
9

bình luận mã

Trong Octave, bạn có thể thêm nhận xét vào mã bằng ký hiệu phần trăm (%), và bạn cũng có thể sử dụng # nếu không cần khả năng tương thích MATLAB. Tùy chọn sử dụng # cho phép bạn viết cùng một dòng chú thích đặc biệt từ ví dụ Python để thực thi tập lệnh trực tiếp trên dòng lệnh

thư viện cần thiết

Mọi thứ được sử dụng trong ví dụ này được chứa trong gói cơ bản, vì vậy bạn không cần tải thêm bất kỳ thư viện mới nào. Nếu bạn cần một thư viện, mô-đun is pkg load. Lệnh này thêm các chức năng của mô-đun vào danh sách các chức năng có sẵn. Về vấn đề này, Python linh hoạt hơn

Định nghĩa biến

Các biến được định nghĩa với khá nhiều cú pháp giống như Python

#! /usr/bin/env python3
0

Lưu ý rằng cuối dòng có dấu chấm phẩy; . Nếu không có dấu chấm phẩy, trình thông dịch sẽ in kết quả của biểu thức

#! /usr/bin/env python3
1

Sản lượng in

Chức năng mạnh mẽ được sử dụng để in trên thiết bị đầu cuối. Không giống như trong Python, hàm printf() không tự động thêm một dòng mới vào cuối chuỗi được in, vì vậy bạn phải thêm nó. Đối số đầu tiên là một chuỗi có thể chứa thông tin định dạng cho các đối số khác được chuyển đến hàm, chẳng hạn như

#! /usr/bin/env python3
2

Trong Python, định dạng được tích hợp vào chính chuỗi, nhưng trong Octave, nó dành riêng cho hàm printf()

Đọc dữ liệu

Chức năng có thể đọc các tệp văn bản có cấu trúc như tệp CSV

#! /usr/bin/env python3
3

Kết quả là một đối tượng ma trận, là một trong những kiểu dữ liệu cơ bản trong Octave. Ma trận có thể được cắt bằng một cú pháp tương tự như Python

#! /usr/bin/env python3
4

Sự khác biệt cơ bản là các chỉ số bắt đầu từ một thay vì không. Do đó, trong ví dụ, các

x

cột là cột số một

lắp dữ liệu

Để khớp dữ liệu với một đường thẳng, bạn có thể sử dụng hàm polyfit(). Nó phù hợp với dữ liệu đầu vào với một đa thức, vì vậy bạn chỉ cần sử dụng một đa thức bậc một

#! /usr/bin/env python3
5

Kết quả là một ma trận với các hệ số đa thức; . Để xác định hệ số tương quan, sử dụng hàm

#! /usr/bin/env python3
6

Cuối cùng, in kết quả bằng hàm printf()

#! /usr/bin/env python3
7

âm mưu

Như trong ví dụ Matplotlib, trước tiên bạn cần tạo tập dữ liệu đại diện cho đường được trang bị

#! /usr/bin/env python3
8

Sự tương tự với NumPy cũng hiển nhiên ở đây, vì nó sử dụng hàm linspace() hoạt động giống như phiên bản tương đương của Python

Một lần nữa, như với Matplotlib, trước tiên hãy tạo một đối tượng hình, sau đó tạo một đối tượng để giữ các ô

#! /usr/bin/env python3
9

Để đặt thuộc tính của đối tượng trục, hãy sử dụng chức năng. Tuy nhiên, giao diện khá khó hiểu vì hàm mong đợi một danh sách các cặp thuộc tính và giá trị được phân tách bằng dấu phẩy. Các cặp này chỉ là sự nối tiếp của một chuỗi đại diện cho tên thuộc tính và đối tượng thứ hai đại diện cho giá trị của thuộc tính đó. Ngoài ra còn có các chức năng khác để thiết lập các thuộc tính khác nhau

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
0

Âm mưu đạt được với chức năng. Hành vi mặc định là mỗi cuộc gọi sẽ đặt lại các trục, vì vậy bạn cần sử dụng chức năng

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
1

Ngoài ra, trong hàm plot() có thể thêm các cặp thuộc tính và giá trị. Phải được tạo riêng và các nhãn phải được nêu thủ công

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
2

Cuối cùng, lưu đầu ra thành hình ảnh PNG

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
3

Thật khó hiểu, trong trường hợp này, các tùy chọn được truyền dưới dạng một chuỗi có tên thuộc tính và giá trị. Vì trong các chuỗi Octave không có các tiện ích định dạng của Python, bạn phải sử dụng hàm. Nó hoạt động giống như hàm printf(), nhưng kết quả của nó không được in ra, thay vào đó nó được trả về dưới dạng một chuỗi

Trong ví dụ này, giống như trong Python, các đối tượng đồ họa được tham chiếu để giữ cho tương tác của chúng rõ ràng. Nếu tài liệu của Python về vấn đề này hơi khó hiểu, thậm chí còn tệ hơn. Hầu hết các ví dụ tôi tìm thấy không quan tâm đến việc tham chiếu các đối tượng; . Toàn cầu theo dõi các số liệu và trục hiện có

Kết quả

Kết quả đầu ra trên dòng lệnh là

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
4

Và điều này cho thấy hình ảnh kết quả được tạo bằng Octave

Gọi Python từ Octave

Tiếp theo

Cả Python và GNU Octave đều có thể vẽ cùng một thông tin, mặc dù chúng khác nhau về cách chúng đến đó. Nếu bạn đang muốn khám phá các ngôn ngữ khác để hoàn thành các tác vụ tương tự, thì tôi thực sự khuyên bạn nên xem Mã Rosetta. Đó là một nguồn tài nguyên tuyệt vời để xem cách giải quyết các vấn đề tương tự bằng nhiều ngôn ngữ.  

Bạn muốn vẽ dữ liệu bằng ngôn ngữ nào?

Đọc gì tiếp theo

Gọi Python từ Octave

Định dạng dữ liệu NFL để thực hiện khoa học dữ liệu với Python

Trong phần 1 của loạt bài này về machine learning với Python, hãy tìm hiểu cách chuẩn bị bộ dữ liệu National Football League để đào tạo

Christa Hayes

15 Tháng mười, 2019

Gọi Python từ Octave

Bắt đầu với Python cho khoa học dữ liệu

Bạn không cần các công cụ đắt tiền để khai thác sức mạnh của khoa học dữ liệu. Bắt đầu với các công cụ mã nguồn mở này

Payal Singh

5 Tháng Ba, 2018

thẻ

con trăn

Khoa học dữ liệu

cristiano l. Phông-ten-nơ

Gọi Python từ Octave

cristiano l. Fontana là nhà nghiên cứu tại Khoa Vật lý và Thiên văn học "Galileo Galilei" của Đại học Padova (Ý) và chuyển sang những trải nghiệm mới khác

Bạn có thể sử dụng Python trong Octave không?

Ở cấp độ cao, các tính năng và khả năng của giao diện Python của Octave cho phép người dùng. Nhập và gọi bất kỳ mô-đun hoặc hàm Python nào từ trình thông dịch Octave . Tự động chuyển đổi các loại Octave và Python cơ bản liền mạch giữa hai môi trường hoạt động.

Octave khác với Python như thế nào?

Python là ngôn ngữ lập trình có mục đích chung do Guido Van Rossum tạo ra. Python được ca ngợi nhiều nhất nhờ cú pháp thanh lịch và mã dễ đọc, nếu bạn mới bắt đầu sự nghiệp lập trình thì Python phù hợp với bạn nhất. Mặt khác, Octave được mô tả chi tiết là "Ngôn ngữ lập trình cho điện toán khoa học" .

oct2py là gì?

Oct2Py cho phép bạn gọi liên tục các tệp M và hàm Octave từ Python . Nó quản lý phiên Octave cho bạn, chia sẻ dữ liệu đằng sau hậu trường bằng các tệp MAT. Cách sử dụng đơn giản như. >>> nhập oct2py >>> oc = oct2py.