Terjemahan asli di blog sayaMendapatkan akses penuh ke Bahasa Wolfram dari Python
Bahasa Wolfram (
Bahasa Wolfram ) memberi programmer
bahasa yang unik dengan berbagai macam algoritma kompleks, serta pengetahuan bawaan tentang dunia. Selama bertahun-tahun, orang telah bertanya kepada kami bagaimana mengakses semua fitur teknologi kami dari lingkungan perangkat lunak lain dan bahasa pemrograman. Tahun berlalu dan kami menciptakan banyak solusi seperti
Wolfram CloudConnector untuk Excel ,
WSTP (
Wolfram Symbol Transfer Protocol) untuk program C / C ++ dan, tentu saja,
J / Link , yang menyediakan akses ke Bahasa Wolfram langsung dari Jawa.
Karenanya, hari ini kami dengan senang hati menghadirkan solusi baru yang telah lama ditunggu-tunggu untuk menggabungkan bahasa, yang
akan memungkinkan Anda
untuk secara langsung dan efisien memanggil Bahasa Wolfram dari bahasa Python :
Wolfram Client Library for Python . Dan yang paling penting, pustaka klien ini memiliki kode sumber terbuka sepenuhnya yang dihosting di
repositori git WolframClientForPython di bawah lisensi MIT, sehingga Anda dapat menyalinnya sebanyak yang Anda suka dan menggunakannya sesuka Anda.
Mudah dan sederhana.
Pustaka klien Wolfram memudahkan untuk mengintegrasikan banyak koleksi
algoritma Bahasa Wolfram, serta
basis pengetahuan Wolfram langsung ke kode Python yang ada, yang secara signifikan menghemat waktu dan upaya Anda saat mengembangkan kode baru. Pada artikel ini, pertama-tama kami menunjukkan kepada Anda cara mengatur koneksi antara Python dan Bahasa Wolfram, lihat beberapa metode dan contoh yang dapat digunakan untuk menghitung dalam Bahasa Wolfram, dan kemudian menyebutnya untuk digunakan dari Python. Untuk
informasi referensi yang lebih
lengkap, kunjungi:
Wolfram Client Library untuk beranda dokumentasi Python .
Hargai di tempat ...
Mari kita mulai dengan contoh sederhana yang menghitung rata-rata dan standar deviasi satu juta angka yang diambil dari distribusi normal. Contoh ini menunjukkan bagaimana memanggil fungsi Wolfram dari Python dan membandingkan hasil dari Python dengan perhitungan Bahasa Wolfram yang sama untuk menunjukkan bahwa mereka sangat konvergen.
Analisis Data Statistik
Pertama, untuk terhubung ke Bahasa Wolfram, Anda perlu membuat sesi baru dengan
Mesin Wolfram (mesin bahasa Wolfram gratis):
from wolframclient.evaluation import WolframLanguageSession session=WolframLanguageSession()
Untuk memanggil fungsi Bahasa Wolfram Anda perlu mengimpor mesin `wl`:
from wolframclient.language import wl
Sekarang Anda dapat menjalankan kode bahasa Wolfram. Tetapkan variabel
sampel dari Python ke nilai daftar satu juta angka acak yang diambil dari distribusi normal, dengan rata-rata 0 dan standar deviasi 1:
sample = session.evaluate(wl.RandomVariate(wl.NormalDistribution(0,1), 1e6))
Pertimbangkan lima yang pertama:
sample[:5] [0.44767075774581, 0.9662810005828261, -1.327910570542906, -0.2383857558557122, 1.1826399551062043]
Anda dapat menghitung rata-rata
sampel ini menggunakan Bahasa Wolfram. Seperti yang diharapkan, itu akan mendekati nol:
session.evaluate(wl.Mean(sample)) 0.0013371607703851515
Anda juga dapat langsung menghitung yang sama dengan Python untuk memastikan Anda mendapatkan hasil yang serupa:
from statistics import mean mean(sample) 0.0013371607703851474
Demikian pula, Anda dapat menghitung standar deviasi
sampel menggunakan Bahasa Wolfram:
session.evaluate(wl.StandardDeviation(sample)) 1.0014296230797068
Kemudian jalankan kode berikut dengan Python untuk memastikan Anda mendapatkan hasil yang serupa:
stdev(sample) 1.0014296230797068
Tidak bisa tidak bersukacita bahwa hasilnya bertemu. Sekarang Anda tahu cara memanggil fungsi Bahasa Wolfram sederhana dari Python. Mari kita lanjutkan dengan contoh yang lebih menarik.
Menggunakan Basis Pengetahuan Wolfram
Mari kita lihat fungsi bawaan Bahasa Wolfram, yang tidak tersedia dalam Python,
WolframAlpha :
moons = session.evaluate(wl.WolframAlpha('moons of Saturn', 'Result'))
Fungsi WolframAlpha adalah salah satu fungsi tingkat tinggi dalam Bahasa Wolfram yang berkomunikasi dengan server
Wolfram | Alpha melalui
API web . Anda dapat menggunakan API ini langsung dari Python, yang membuat memanggil fungsi WolframAlpha jauh lebih kuat dan lebih nyaman, karena Anda mendapatkan akses ke semua fungsi pemrosesan data langsung dari Bahasa Wolfram. Mari kita lihat apa isi variabel
bulan dalam Python:
moons EntityClass['PlanetaryMoon', 'SaturnMoon']
Output di sini adalah representasi dalam Python ekspresi dari Bahasa Wolfram, yang dapat digunakan dalam perhitungan selanjutnya. Misalnya, jika Anda ingin mendapatkan daftar empat satelit pertama Saturnus (berdasarkan tingkat kedekatannya dengan Saturnus) untuk ini, Anda perlu menjalankan kode berikut:
session.evaluate(wl.EntityList(moons))[:4] [Entity['PlanetaryMoon', 'S2009S1'], Entity['PlanetaryMoon', 'Pan'], Entity['PlanetaryMoon', 'Daphnis'], Entity['PlanetaryMoon', 'Atlas']]
Atau Anda dapat menampilkan empat satelit massal terbesar di Saturnus dengan kode ini:
bigmoons = session.evaluate(wl.EntityList(wl.SortedEntityClass(moons, wl.Rule("Mass","Descending"),4))) bigmoons [Entity['PlanetaryMoon', 'Titan'], Entity['PlanetaryMoon', 'Rhea'], Entity['PlanetaryMoon', 'Iapetus'], Entity['PlanetaryMoon', 'Dione']]
Atau Anda bisa mendapatkan serangkaian string dengan nama-nama satelit ini, misalnya:
session.evaluate(wl.Map(wl.Function( wl.Slot()("Name")), bigmoons)) ['Titan', 'Rhea', 'Iapetus', 'Dione']
Semua ini sangat mengesankan. Mari kita lihat contoh lain menggunakan fungsi pemrosesan gambar dan pembelajaran mesin yang dibangun ke dalam Bahasa Wolfram.
Pemrosesan Gambar dan Pembelajaran Mesin
Pertama, mari kita beralih ke mode lain untuk melakukan evaluasi langsung dalam Bahasa Wolfram. Sejauh ini, Anda telah menggunakan mesin `wl` untuk membuat ekspresi Bahasa Wolfram dalam Python, tetapi Anda juga dapat menjalankan baris kode yang ditulis dalam Python yang berisi kode Bahasa Wolfram, dan kadang-kadang bahkan lebih mudah dirasakan:
from wolframclient.language import wlexpr
Misalnya, hitung 1 +1 dalam Bahasa Wolfram, kirimkan sebagai string:
session.evaluate('1+1') 2
Dengan menggunakan metode ini, Anda dapat menulis kode kecil dalam Bahasa Wolfram, yang menerima gambar pada input dan menggunakan
algoritma deteksi wajah bawaan untuk menemukan lokasi wajah pada gambar. Di sini, gambar yang kami gunakan adalah lukisan terkenal “
Gadis dengan Anting-Anting Mutiara ” oleh seniman Belanda
Johannes Vermeer (harus dicatat, tentu saja, algoritma ini akan bekerja juga pada hampir semua gambar dengan objek di mana wajah dapat dikenali). Karena antarmuka terminal Python tidak mendukung output gambar, kita perlu menggunakan
Notebook Jupyter bersama dengan paket
Python Image Library (PIL) agar dapat menampilkan hasilnya:
from PIL import Image import io
session.evaluate(wlexpr(''' image = ImageResize[ Import["Girl_with_a_Pearl_Earring.jpg"], 300]; boxes = FindFaces[image]; face = ImageAssemble[{{image,HighlightImage[image, boxes, "Blur"]}}]; ''') )
data = session.evaluate( wlexpr('ExportByteArray[ face, "PNG" ]') )
Image.open(io.BytesIO)

Hasilnya, semuanya ternyata cukup mudah dan kuat pada saat bersamaan. Tetapi apa yang harus dilakukan jika Anda tidak menginstal Mesin Wolfram secara lokal di komputer Anda, dan Anda ingin menggunakan pustaka klien Wolfram untuk Python? Dalam hal ini, Anda selalu dapat menggunakan Bahasa Wolfram secara langsung dengan memanggilnya dari
Wolfram Cloud (cloud).
Jadi, pergi ke cloud
Wolfram Cloud menyediakan akses mudah ke Bahasa Wolfram tanpa melakukan pra-instal secara lokal. Wolfram Cloud menyediakan berbagai layanan, termasuk antarmuka pemrograman web Wolfram Language, serta kemampuan untuk menggunakan API web kustom Wolfram Language.
Dalam contoh berikut, kami akan melakukan ini dengan menggunakan web-API Bahasa Wolfram. Misalnya, API menerima nama dua negara (country1 dan country2) pada input, menemukan modal untuk setiap negara dan kemudian menghitung jarak di antara mereka (dalam kilometer):
CloudDeploy[ APIFunction[{"country1"->"String","country2"->"String"}, QuantityMagnitude[ GeoDistance[ EntityValue[Entity["Country", #country1], "CapitalCity"], EntityValue[Entity["Country", #country2], "CapitalCity"] ], "Kilometers" ]&, "WXF" ], CloudObject["api/public/capital_distance"], Permissions->"Public"]

Setelah menggunakan API ini, Anda dapat memulai sesi Bahasa Wolfram baru, tetapi kali ini Anda terhubung ke Wolfram Cloud alih-alih mesin lokal:
from wolframclient.evaluation WolframCloudSession cloud = WolframCloudSession()
Untuk memanggil API, Anda harus menentukan nama pengguna (pengguna1) dan titik akhir API (api / publik / capital_distance). Dengan menggunakan data ini, Anda dapat terhubung ke cloud ...
api = ('user1', 'api/public/capital_distance') result = cloud.call(api, {'country1': 'Netherlands', 'country2': 'Spain'})
... lalu dapatkan hasil yang diinginkan:
result.get() 1481.4538329484521
Evaluasi sekali lagi betapa mudah dan sederhananya.
Jika Anda ingin menyimpan API Bahasa Wolfram yang digunakan sehingga hanya Anda yang dapat menggunakannya, Anda dapat menggunakan API menggunakan
izin → → "Pribadi" . Untuk melakukan ini, di API pribadi, Anda dapat membuat (dalam Bahasa Wolfram) kunci keamanan otentikasi:

key = GenerateSecuredAuthenticationKey["myapp"]
Salin jawaban dari dua jalur input ini:
key["ConsumerKey"] key["ConsumerSecret"]
Kemudian rekatkan ke dalam sesi Python Anda:
SecuredAuthenticationKey('<<paste-consumer-key-here>>', '<<paste-consumer-secret-here>>')
Dan kemudian mulai sesi cloud baru dengan otentikasi:
cloud = WolframCloudSession(credentials=sak) cloud.start() cloud.authorized() True
Sekarang Anda (dan hanya Anda) dapat menggunakan API Bahasa Wolfram apa pun yang Anda gunakan untuk penggunaan pribadi.
Mari kita bicara sedikit tentang konsep dasar serialisasi
Untuk melakukan semuanya dengan cepat dan efisien, pustaka klien Wolfram untuk Python menggunakan
format WXF terbuka untuk bertukar ekspresi antara Python dan Wolfram. WXF adalah format biner untuk membuat serialisasi ekspresi Bahasa Wolfram secara akurat dalam bentuk yang cocok untuk berbagi dengan program eksternal. Fungsi pustaka
Ekspor dapat membuat serial objek Python ke bentuk input string dan WXF, dan juga mendukung sekumpulan kelas bawaan Python seperti dikt, daftar, dan string:
from wolframclient.serializers import export export({ 'list': [1,2,3], 'string': u'abc', 'etc': [0, None, -1.2] }) b'<|"list" -> {1, 2, 3}, "string" -> "abc", "etc" -> {0, None, -1.2}|>'
WXF adalah susunan numerik dengan data yang dikemas, yang memungkinkan Anda untuk secara efektif mendukung array
NumPy .
Misalnya, buat array 255 bilangan bulat 8-bit:
import numpy array=numpy.arange(255, dtype='uint8')
Serialisasi ke byte WXF dan hitung jumlah byte:
wxf=export(array, target_format='wxf') len(wxf) 262
NumPy memungkinkan Anda untuk mengakses banyak pustaka Python. Konsekuensinya, serialisasi yang efisien dan ringkas ini membantu menghubungkan sistem Python ke Bahasa Wolfram, akibat langsung yang mendukung di NumPy bahwa membuat serialisasi gambar PIL pada umumnya sangat efisien. Sebagian besar mode data piksel ditampilkan sebagai salah satu jenis array numerik yang ditentukan sebagai
NumericArrayType .
Perlu juga dicatat bahwa Seri
panda dan DataFrame awalnya didukung di sini. Perpustakaan juga menyediakan
mekanisme yang dapat diperluas untuk membuat serialisasi kelas yang sewenang-wenang.
Apa yang tersedia sekarang?
Instal pustaka klien Wolfram terbaru untuk Python menggunakan perintah
pip :
$ pip install wolframclient
Untuk melakukan ini, Anda memerlukan Python 3.5.3 (atau versi yang lebih baru) dan Wolfram Language 11.3 (atau versi yang lebih baru). Lihat dokumentasi
pustaka klien Wolfram untuk Python . Semua kode sumber di-host di repositori
WolframClientForPython di Wolfram Research
GitHub .
Jika Anda memiliki saran untuk meningkatkannya dan Anda bisa dan ingin membantu kami melakukan ini, Anda dapat melakukan ini dengan mengirimkan permintaan kepada kami untuk memperbarui data dalam repositori ini.
Kami sangat senang bahwa rilis ini akhirnya terjadi dan kami berharap ini akan bermanfaat bagi Anda. Tolong beri tahu kami pendapat Anda di bagian komentar atau di
komunitas Wolfram , dan kami akan melakukan yang terbaik untuk menghubungi Anda secara pribadi.
Tentang terjemahanSaya mengucapkan terima kasih yang mendalam kepada
Peter Tenishev dan
Galina Nikitina atas bantuan mereka dalam menerjemahkan dan menyiapkan publikasi.
Ingin belajar cara memprogram dalam Bahasa Wolfram?
Tonton webinar mingguan.
Pendaftaran untuk kursus baru . Kursus online siap.
Memesan solusi di Bahasa Wolfram.