Skip to main content

MATLAB ve Python Birlikte Nasıl Kullanılır?

Bu blog yazısı içerisinde de MATLAB ile Python’un birlikte çalışabilirliği, yetenekleri konusunda bazı önemli ipuçlarından bahsediyor olacağız.

Öğrenciyseniz, akademik çalışmalar yürütüyorsanız veya endüstride çalışıyorsanız muhtemelen birden fazla yazılım ortamında geliştirilen çalışmaları birbiri ile entegre etme gereksinimi hissetmişsinizdir. Bu, özellikle birden fazla ekiple eş zamanlı çalışıldığında ve donanım gereksinimi birden fazla olduğunda karşımıza sıklıkla çıkan durumlardandır. MATLAB’in de yeteneklerine baktığımızda birden fazla platform ile çalışılabilirliği söz konusudur. Mühendislik ve bilimsel uygulama çalışmalarında da bu durum çok yaygındır. Bu konu özelinde de MIT CSIAL’daki araştırmacıların da çıplak gözle algılanamayan renk ve hareket değişikliklerini tespit etmek için MATLAB ve C++’ın güçlü yanlarından faydalandıklarını görebiliyoruz.

Yapay zekâ özelinde geliştirilen projelere baktığımızda sıklıkla karşımıza Python ve MATLAB çalışmaları çıkar. Bu blog yazısında da bu konu üzerinde duracak, MATLAB ile Python’un tek bir arayüz içerisinde nasıl geliştirilebildiğinden bahsedeceğiz. Her iki dilde de harika algoritmalar üzerine çalışan, öğreten ve örnekler paylaşan büyük bir topluluk kitlesi var. Öyleyse neden yazılım dili tercihinden bağımsız olarak tüm bu mükemmel çalışmalardan faydalanmayalım? Örnek olarak vermek gerekirse, hava kalitesi tahmin algoritması ve duyarlılık analizi algoritmasını oluştururken MATLAB ve Python’un birlikte kullanılabilirliğini inceleyebiliriz. Bu iki yazılım dili de Yapay Zekâ (YZ) uygulamaları geliştirilirken birlikte kullanılabilmektedir. Birlikte çalışılabilirlik konusu da bizler için o kadar fazla önemlidir ki MATLAB içerisinde ONNX ve TensorFlow aracılığıyla geliştirilen derin öğrenme ağlarını doğrudan içeriye aktarabilir veya dış ortamlara dağıtabiliriz.


Temeller

Öncelikle sistem gereksinimlerimizi bir kenara bırakalım ve MATLAB ile Python’un kısaca tarihine göz attıktan sonra versiyonlar hakkında biraz bilgi edinelim (eski versiyonları kullananlar olabilir). Temel olarak Python’u kullanabilmek için MATLAB R2014b veya sonrası sürümüne ihtiyacımız olacak. MATLAB ile Python’un çeşitli versiyonları için uyumları söz konusudur. Her geliştirme ile de aralarındaki bağ daha da kuvvetlenmiş olarak karşımıza çıkmaktadır. (Python ve MATLAB’in birlikte çalışabilirlik yeteneklerini en güncel olarak keşfetmek için MATLAB R2025a’ya yükseltmek iyi bir zaman olarak görünüyor!) Sürüm ayrıntılarına da buradan bakabilirsiniz.


Python’u MATLAB’den Çağırma

Başlamadan önce MATLAB’in Python ortamını görebildiğini doğrulayalım. Bunu MATLAB’de pyenv fonksiyonu ile yapabiliriz.

>> pyenv
ans =
      PythonEnvironment with properties:
 
                   Version:          “3.6”
           Executable:          “C:\Python36\WPy-3670\python-3.6.7.amd64\python.EXE”
                    Library:          “C:\Python36\WPy-3670\python-3.6.7.amd64\python36.dll”
                     Home:           “C:\Python36\WPy-3670\python-3.6.7.amd64”
                     Status:          Loaded
  ExecutionMode:          OutOfProcess
             ProcessID:          “20980”
     ProcessName:          “MATLABPyHost”

pyenv fonksiyonu aracılığıyla da değiştirilebilen Python sürümünü ve ortam ayarlarını görüntüleyebiliriz.
Artık Python’a erişebildiğimize göre onu kullanabiliriz! İlk aşamada basit bir örnek olarak matematik kütüphanesini kullanıp sqrt (karekök alma) fonksiyonunu deneyeceğiz.

>>> import math
>>> math.sqrt(42)
6.48074069840786


Aynı Python fonksiyonunu MATLAB’da çağırmak için ise aşağıdaki kodu kullanabiliriz:

>> py.math.sqrt(42)
ans =
    6.480740698407860

Aynı hassasiyeti MATLAB ve Python’da görüntülemek için format long’u kullandık.
Şimdi ise davranışı biraz genelleştirelim. Python modüllerine ve fonksiyonlarına aşağıdaki sözdizimi kullanarak erişiriz.

>> py.module_name.function_name

Kullanıcı tanımlı modüller de aynı şekilde çağırılır. Örneğin hava kalitesi uygulamasındaki weather.py modülü, bir web API’si aracılığıyla belirli bir konum için hava durumu verilerini okuyan fonksiyonu içerir:

>> data = py.weather.get_current_weather(“Boston”,”US”,key)
data =
  Python dict with no properties.
 
{‘coord’: {‘lon’: -71.06, ‘lat’: 42.36}, ‘weather’: [{‘id’: 804, ‘main’: ‘Clouds’, ‘description’: ‘overcast clouds’, ‘icon’: ’04n’}], ‘base’: ‘stations’, ‘main’: {‘temp’: 53.2, ‘feels_like’: 34.9, ‘temp_min’: 51.01, ‘temp_max’: 55, ‘pressure’: 1003, ‘humidity’: 46}, ‘visibility’: 16093, ‘wind’: {‘speed’: 26.4, ‘deg’: 230, ‘gust’: 34.45}, ‘clouds’: {‘all’: 90}, ‘dt’: 1587342601, ‘sys’: {‘type’: 1, ‘id’: 3486, ‘country’: ‘US’, ‘sunrise’: 1587290159, ‘sunset’: 1587339006}, ‘timezone’: -14400, ‘id’: 4930956, ‘name’: ‘Boston’, ‘cod’: 200}

MATLAB’da çıktının bir Python veri tipinde olduğuna dikkat edin! Bunu MATLAB türüne dönüştürebiliriz ancak şimdilik doğrudan bu veri ile çalışmaya devam edelim. Bu şekilde iş akışının devam etmesinin sebebi tek bir arayüzde iki farklı dil ile eş zamanlı çalışabiliyor olmamızdır. Daha fazla özellik çıkarmaya devam edelim.

>> weatherData = py.weather.parse_current_json(data)
data =
  Python dict with no properties.
 
{‘temp’: 39.31, ‘feels_like’: 31.44, ‘temp_min’: 37, ‘temp_max’: 41, ‘pressure’: 1010, ‘humidity’: 80, ‘speed’: 8.05, ‘deg’: 340, ‘city’: ‘Boston’, ‘lat’: 42.36, ‘lon’: -71.06, ‘current_time’: ‘2020-04-18 20:48:00.985146’}

Belirli değerleri görüntülemek için aşağıdaki sözcük yapısına başvururuz:

>> T = weatherData{“temp”}
T = 39.3100

Bu aşamada parantez “()” yerine süslü parantez “{}” kullandığımız duruma dikkat edelim. MATLAB’de, hücre dizileri ve tablolar gibi heterojen veri türlerindeki değişkenlere erişirken genellikle süslü parantez kullanılır. Bu yolu hatırlamanın kolay yolu da normal parantez “()” kullanırken aynı türdeki daha büyük bir veri kümesinin (hücre dizisi veya tablo) alt kümesini elde edebiliyorken süslü parantez “{}” kullandığımızda da sıralanmış diğer orijinal veri türlerine (double, string, char vb.) erişebiliyoruz. Yukarıdaki örnekte de görüldüğü üzere veri içerisinde heterojen bir dağılım vardır. Sıcaklık değerimizin türü de double’dir ve bunu çekmek için süslü parantez kullanırız. Buradaki örnek, Python söz diziminde indekslemeyi gösterir.

Bu aşamadan sonra söz dizimi terimini kavradığımıza göre fonksiyonlardaki çağırmalardaki bir diğer farklılıktan bahsetmek istiyorum. Örneğin varsayalım ki hava durumu verilerinin birimlerini değiştirmek istiyoruz. Python tarafındaki get_forcast fonksiyonu aşağıdaki kodda gösterildiği gibi kullanılır:

>>> forecast = weather.get_forecast(“Boston”,”US”,key,units=”metric”)

MATLAB tarafında ise bu durum pyargs fonksiyonu ad-değer fonksiyonu olarak kullanılır:

>> forecast = py.weather.get_forecast(“Boston”,”US”,key,pyargs(“units”,”metric”)

Şimdi bu kısma kadar MATLAB içerisinde Python sözdizimi ve Python kütüphanelerinin nasıl kullanıldığını, bunu kendi projelerimize nasıl uyarlayabileceğimizi gördük. Bu durumun tam tersi de söz konusudur. Python tarafında MATLAB’ı çağırabilir, MATLAB çıktılarını Python kodumuza entegre edebiliriz. Hadi şimdi buna bir göz atalım. 


Python’dan MATLAB’i Çağırma

Python için MATLAB Engine API, MATLAB’i Python için bir hesaplama motoru, bir algoritma geliştirme ortamı olarak çağırmamıza olanak sağlar. Böylece favori MATLAB kodlarımızı Python’da kullanabiliriz. İlk olarak Python içerisine MATLAB aracını tanıtmamız gerekir. İşletim sistemi (OS prompt)’nde aşağıdaki kodu çalıştırın.

$ cd “matlabroot/extern/engines/python”
$ python setup.py install

“matlabroot” MATLAB’ın kurulu olduğu dizindir (MATLAB’da >> matlabroot’u çağırarak kontrol edin). Kurulum hakkında daha fazla bilgi için bu belge sayfasını kontrol edin.

Şimdi ise eğlenceli kısma geçelim! Python’da MATLAB fonksiyonlarını çağırmak için önce MATLAB Engine’yi içeriye aktarın ve başlatın (eğer halihazırda çalışan bir MATLAB oturumu varsa mevcut oturumu da kullanabilirsiniz).

>>> import matlab.engine
>>> eng = matlab.engine.start_matlab()

Şimdi ise karekök fonksiyonunu çağıralım:

>>> x = eng.sqrt(42.0)
6.48074069840786

Burada önemli bir hususa değinmek istiyorum. sqrt fonksiyonunu 42 ile değil 42.0 ile çağırdık. Bunun neden önemli olduğunu bir sonraki bölümde öğreneceğiz. Blog yazımızı sıkıca takip etmeyi unutmayın!

MATLAB işlevi kendi yerel sözdizimleriyle birlikte çağrılır. Ancak bazı belirgin farklar mevcuttur. Farklılıklarımızdan birisi, birden fazla çıktının yakalanma biçimidir. Örneğin duygu analizi algoritmasında MATLAB kodu duygu ve puanlar için birden fazla çıktı döndürür. Burada nargout kullanarak ilgilenilecek çıktı sayısını belirtmemiz gerekir.

>>> [sentiment,scores] = eng.sentimentAnalysis(text,nargout=2)
Positive
[[0.0,0.510948896408081,0.48905110359191895]]

Benzer şekilde MATLAB fonksiyonumuz hiçbir çıktı döndürmüyorsa (örneğin fonksiyon sonuçları bir dosyaya yazılıyorsa), nargout = 0 değerini kullanmamız gerekir.

Bu aşamadan sonra işimiz bittiğinde, sistem kaynaklarını serbest bırakmak için MATLAB Engine’yi durdurmalıyız.

>>> eng.exit()

Bu adım ile ilgili son olarak şunu belirtmeliyim ki, MATLAB operatörlerini çağırmak için (doğrusal denklem sistemlerini çözmek için kullanılan ünlü ters eğik çizgi “\” operatörü gibi), fonksiyon adlarını (mldivide) kullanmamız gerekir. MATLAB operatörleri ve ilişkili fonksiyonların tam listesini burada bulabilirsiniz.


Veri Türleri Dönüştürme

Daha önce sqrt fonksiyonunu çağırdığımızda, MATLAB’de 42’yi, Python’da 42.0’ı kullanmıştık. Peki neden bu fark?

42 değerini kullanmak MATLAB’de bir double tipinde bir veri döndürürken Python’da bir tam sayı döndürür. Bu kullandığımız karekök örneğimizde float(42) dönüşüm fonksiyonunu kullanmadan veya MATLAB’in sqrt fonksiyonu single, double veya complex tiplerini kabul ettiğinden 42.0 yazmadan hata verirdi.

>>> eng.sqrt(42.0)
6.48074069840786
 
>>> eng.sqrt(float(42))
6.48074069840786

MATLAB’de beklenen tipleri Python fonksiyonlarına geçirmek için tam sayı ve diğer tip dönüştürme fonksiyonlarını (aşağıdaki tabloda gösterilmiştir) da kullanabiliriz.

Bu aşamada dönüşüm yapılınca girdiler bizim için sorunsuz olur. Peki ya çıktılar?

Aşağıdaki tablo yaygın veri tiplerinin eşleşmelerini göstermektedir (daha kapsamlı bir liste, dokümanlarda yer almaktadır).

MATLAB Pyhton
double, singlefloat
complex single,
complex double
Complex
(u) int8, (u) int16
(u) int32, (u) int64
int
NaNfloat(nan)
Inffloat(inf)
string, charstr
logicalbool
structuredict
arraysarray.array()
cell arraylist, tuple

Burada timetable veya categorical gibi bazı özel MATLAB veri tipleri biraz ekstra uğraş isteyecek ve elle dönüştürülmeleri gerekecektir. Neticede Python’un anlayabileceği şekilde dönüşümü gerçekleştirilen veriler fonksiyonlarımızda kullanılmaya devam edilecektir.

MATLABConversion function
categoricalchar()
stringchar()
tabletable2struct()
timetabletimetable2struct()
datetimechat()

MATLAB ve Python arasındaki bu veri geçişlerinden endişeli olabilirsiniz ki bu endişeye gerek yoktur. Bunlar genellikle öncelikle planlama yaparak önlenebilir, iş yükünü hafifletebilir. Tekrar duygu analizi algoritmamıza dönecek olursak ses verileri tam sayılar olarak içeriye aktarılır (varsayılan double yerine) ve buradaki algoritma daha sonra doğrudan Python fonksiyonlarıyla kurgulanır.

Ayrıca özellikle ekipler ve diller arasında iş birliği yaparken verileri aktarmak için genellikle dosyaları kullanmak yaygındır. Verilerimiz tablo halindeyse iki dil arasında veri aktarmak için Apache Parquet’i kullanabiliriz. MATLAB, Parquet’te verileri verimli bir şekilde okumak ve yazmak için Apache Arrow’u kullanır. Verileri okuyabilir, hesaplamalar yapabilir ve verileri desteklenen birkaç dilden Parquet’e yazabiliriz.

Bu, daha büyük veri setleri ile çalışmak için yaygın bir işlemdir ve dönüştürmede kopya ve ekstra ek yük oluşturmaktan kaçınmaya yardımcı olur. MATLAB’de Parquet dosyalarının nasıl okunacağı ve yazılacağı hakkında daha fazla bilgi edinmek için bu dokümantasyon sayfasına göz atabilirsiniz.


Hata Mesajları

Şimdiye kadar hatalardan sürekli kaçarak algoritmamızı geliştirdik. Ancak hadi biraz gerçekçi olalım! Hatalar her algoritma geliştiricisinin karşısına çıkan, kaçınılmaz sonuçlardır. Hata mesajlarını yorumlamak değerli bir beceridir. MATLAB’de Python hataları ve Python’da MATLAB hataları gibi yaygın sorunların giderilmesine ilişkin belge sayfaları mevcuttur. Karşımıza çıkan hata mesajlarını nasıl okuyacağımıza dair tüm günümüzü harcayabiliriz veya ChatGPT gibi yapay zekâ modellerine de sorgulatabiliriz. Fakat buradaki en yararlı ders, hatanın MATLAB’den mi yoksa Python’dan mı meydana geldiğini bilmemiz, kurguladığımız yapıya hâkim olmamızdır. Hata mesajına baktığımızda ilgili hatanın nereden kaynakladığına dair bir gösterge görebiliriz.

Şimdi ise hatalı bir veri tipi ile sqrt fonksiyonu çalıştıralım:

>> py.math.sqrt(“42”)
Python Error: TypeError: must be real number, not str

MATLAB’de satırın başında Python Error’u görüyoruz. Ardından Python’dan kaynaklanan hata mesajı açıklaması geliyor. Bu da hatalarımızı ayıklamayı kolaylaştırıyor! MATLAB burada Python hatasını yakaladı ve aynı mesajı içeren bir MATLAB düzeltme uyarısı oluşturdu.
Aynısını Python’da yapalım:

>>> eng.sqrt(“42”)
Traceback (most recent call last):

MatlabExecutionError: Undefined function ‘sqrt’ for input arguments of type ‘char’.

Python geri izleme burada en aza indirilmiştir. Ancak son satıra bakarsak MatlabExecutionError ve MATLAB hata mesajını görürüz. MATLAB hata mesajı Python içerisinde de yakalandı ve Python içerisinde düzeltme uyarısı oluşturuldu.

Bu kısmı biraz basit tutuyorum. İstisnaları yakalamanın daha karmaşık yolları vardır ve bunlar test ile uygulama paylaşımları için yararlı olabilirler. Sizlere daha fazla bilgi için burada bir uzantı bıraktım.


MATLAB Kodundan Python Paketi Oluşturma

Şimdiye kadar MATLAB’i Python’dan veya tam tersi kullanmaktan bahsettik. Ancak bu çalışmalarda her ikisinin de aynı makineye kurulu olduğunu varsaydık. Çalışmamızı MATLAB kurulu olmayan kişiler ile nasıl paylaşabiliriz? Bu bölümde de buraya değinmek istiyorum.

MATLAB Compiler SDK, MATLAB kodunu ve destekleyici dosyaları Python’dan (veya Java, C/C++, vb.) çağıracak ve bir çalışma zamanı ile yürütecek şekilde diğer dillerde paketlememize olanak tanır. Ayrıca süreci yürütmeye ve gerekli dosyaları oluşturmaya yardımcı olmak için bir uygulama da sağlanır.

Hava kalitesi tahmini örneği, MATLAB tahmin fonksiyonu predictAirQual.m’den bir Python paketi oluşturmak için bu işlemi kullanır. Library Compiler App kullanabilir ve dahil edilecek fonksiyonu/fonksiyonları seçebiliriz (bağımlılıklar otomatik olarak algılanır).

Bu, ihtiyacımız olan dosyaları paketler ve Python adımlarına ilişkin talimatları içeren bir setup.py ve readme.txt dosyası oluşturur.

Bunu Python’da çağırmak için oluşturulan setup.py dosyasını kullanarak MATLAB Engine API’si için olan sürece benzer bir kurulum adımı vardır (talimatlar burada).
Daha sonra paketi içe aktarıp başlatmamız ve fonksiyonları şu şekilde çağırmamız gerekiyor:

>>> import AirQual
>>> aq = AirQual.initialize()
>>> result = aq.predictAirQual()

İşimiz bitince de süreci sonlandırmak için aşağıdaki kodu kullanırız:

>>> aq.terminate()

Hava kalitesi örneği, bir web arayüzünde kullanılacak (ve potansiyel olarak aynı anda birçok kullanıcı tarafından erişebilecek) MATLAB işlevselliğini paylaşmada bir adım daha ileri gidiyor. Bu durum, yük dengeleme için MATLAB Production Server kullanılabilir ve MATLAV koduna bir RESTful API veya Python istemcisi aracılığıyla erişilebilir.

Bu kısımda daha fazla ilerlemeyeceğiz. Sadece birkaç kaynak daha paylaşıp toparlamak istiyorum. Hava kalitesi ve duygu analizi örnekleri, MATLAB ve Python’un birlikte nasıl ve neden harika şeyler için kullanılabileceğini göstermek için harika örneklerdir! Ayrıca Python’u MATLAB’den çağırmak ve MATLAB’i Python’dan çağırmak için duygu örneğini kullanarak kısa videolar da oluşturulmuştur. Ayrıca hava kalitesi örneğiyle yukarıdakilerin hepsini tartışan bir video da vardır.


Sonuç

En nihayetinde son bölüme kadar ulaşmış bulunuyoruz. Yukarıda anlattığımız konu özelinde farklı ekipler birbirleri ile paralel şekilde çalışabilir, farklı dillere yoğunlaşabilir, algoritmalarını farklı platformlarda geliştirebilir ve ortak bir paydada, platformda buluşabilirler. Bu durum bizlere ekipler arasındaki veri kayıplarını minimize etmeye, anlaşmazlığı ortadan kaldırmaya ve daha az zaman maliyetinde ürün çıkarmaya yardımcı olur.

Python’u MATLAB içerisine entegre ederek OpenCV kütüphanesinin MATLAB Script’inde nasıl çalıştırılabileceğini öğrenmek için buradaki linke göz atabilirsiniz. 

Yazar Adı

Doğukan Mehmet Kılınç

Yazar Title

Yapay Zeka ve Makine Öğrenmesi Mühendisi

Bloglar

  • Satcom on the Move Terminali İçin Senaryo Oluşumu
  • Sevginizi MATLAB ile Kodlayın!
  • İHA Modelleme ve Simülasyonunun Önemi
  • Model Tabanlı Sistem Mühendisliği Hakkında Merak Ettikleriniz!
  • Teknolojiyi Keşfet, Bilgini Test Et!
  • MATLAB ve Simulink’te Kendinizi Test Edin!
  • MATLAB SÖZLÜĞÜ
  • Otomotiv Sistemlerinde Model Tabanlı Sistem Tasarımı
  • Simulink, MATLAB’de Nasıl Çalışır?
  • Simulink ile Modelleme ve Simülasyon
  • MATLAB ile Sayısal Hesaplama Dünyasına Giriş
  • STANDART SEYİR ÇEVRİMLERİ VE MODEL TABANLI SİMÜLASYONDA ELEKTRİKLİ ARAÇTA HARCANAN ENERJİ KARŞILAŞTIRMASI
  • Akıllı Aynalar
  • Elon Musk NeuraLink ile Ne Hedefliyor?
  • 2020’nin Yükselen 10 Teknolojisi
  • Özellik Çıkarımı ve Yüz Tanıma Algoritmalarının Performans Karşılaştırması
Kurumsal e-bültenimize abone olarak FİGES hakkındaki güncel gelişmelerden haberdar olabilirsiniz.
Sosyal Medya'da FİGES
FİGES Facebook
FİGES Twitter
FİGES Linkedin
FİGES Instagram

© FİGES A.Ş. Tüm hakları saklıdır. Tasarım ordek.co.