Наука за данните

Как да изчислим матрици в Python без NumPy

Как да изчислим матрици в Python без NumPy
За много приложения ви е необходима математика. В Python има математически модул, който се справя с основите като закръгляване, факториал и закръгляване. Той също така включва Power & logarithmic, тригонометрия, ъглови и хиперболични функции. За комплексни числа модулът е cmath. Те обаче не се справят с матрични операции.

Каква е разликата между масивите и матриците?

Някои хора търсят матрични решения за проблеми с масиви, така че каква е разликата?  Голямата разлика е, че матричните стойности са числа, масивът може да съдържа друга информация, дори низове.  Матриците могат да представляват уравнения, това е мястото, където повечето разработчици имат нужда от тях, поне в случай на замяна на NumPy.

Как се прави матрично изчисление?

Стандартните матрични операции са лесни за изпълнение, когато добавяте просто добавяте елементите, при умножаването можете да използвате скалар за всеки елемент и т.н.

Умножението е малко по-сложно, но с много малко. Това, което го прави тежък, е, че трябва да направите много изчисления за всяко решение, тук идва производителността. Тъй като по-голямата част от изчисленията не зависят едно от друго, тези изчисления са отлични кандидати за паралелно изчисление. Графичните процесори са предназначени за този вид изчисления и са проектирани да се добавят лесно към настолни системи.

Когато трябва да направите матрични изчисления в Python, първото решение, което намерите, е numPy.  NumPy обаче не винаги е най-ефективната система за изчисляване на много матрици.
Тази публикация ще обхване какви опции имате в Python.

Когато имате нужда от алтернативи, започнете, като погледнете по-внимателно за какво ви трябват матрични операции. Текущата ви инсталация може вече да има или собствена реализация, или използва основна библиотека. Пример е машинното обучение, където необходимостта от матрични операции е от първостепенно значение. TensorFlow има собствена библиотека за матрични операции. Уверете се, че знаете текущата си библиотека.

В много случаи обаче се нуждаете от решение, което работи за вас. Може би има ограничения в NumPy, някои библиотеки са по-бързи от NumPy и специално създадени за матрици. Много пъти разработчиците искат да ускорят кода си, за да започнат да търсят алтернативи. Една от причините е, че NumPy не може да работи на графични процесори.

Докато тази публикация е за алтернативи на NumPy, библиотека, изградена върху NumPy, библиотеката Theano трябва да бъде спомената. Библиотеката Theano е тясно интегрирана с NumPy и позволява матрица, поддържана от GPU. Theano е по-голяма библиотека за машинно обучение, но можете да извадите само матричните функции.

За по-задълбочено обяснение на използването на Theano вижте тази страница: http: // www.marekrei.com / blog / theano-tutorial /

SpPy е библиотека, специално за разредени масиви, все още може да се използва за матрици. Разреденият масив, между другото, е масив, който има много нулеви стойности в себе си. Тази библиотека е малка и ефективна, но малко ограничена поради своята специализация. Той също така използва NumPy, но е по-ефективен от просто NumPy.
https: // pythonhosted.org / sppy /

Eigen е ефективно изпълнение на матрици, за да го използвате в Python ви трябва miniEigen, достъпен на https: // pypi.org / pypi / minieigen. Eigen всъщност е включен в много други решения. Той действа като обща матрична библиотека за по-специализирани модули и рамки. Тази библиотека има много модули за манипулация на плътна матрица и масив. Той също така поддържа линейна алгебра, декомпозиция и оскъдна линейна алгебра. Пакетът също има функция за приставки, така че можете да добавяте свои собствени модули.
За да използвате Eigen, инсталирайте го с pip и го импортирайте във вашия код.

PyTorch е библиотека за машинно обучение, поради което има матрични операции. Импортирането на цялата библиотека е излишно, ако искате да направите само няколко изчисления. Ако обаче тепърва започвате с проект за машинно обучение, уверете се, че сте решили дали този е за вас.
Друга алтернатива е да извлечете всяка C-библиотека и да я използвате. За да направите това възможно, има решение на име cffi, което ще създаде интерфейса за вас. Това решение изисква вече да знаете C и да създадете обвивка за всяка функция, от която се нуждаете. След това кодът ще изглежда объркан и труден за четене, но това може да си заслужава в зависимост от вашия проект.

Ако просто искате да ускорите всички масиви и цифрови функции, можете вместо това да използвате numba. Numba е компилатор на Python. Когато го използвате, компилаторът ще създаде двоичен код „точно навреме“, jit. Идеята за jit е по-често използвана с Java, но е много полезна за тежка математика в Python. Тъй като Python се интерпретира, можете да получите проблеми с производителността с тежка математика, numba се грижи за това, като компилира на CPU или GPU по ваш избор.
Налични са и паралелни изчислителни функции, по подразбиране компилаторът работи със заключване, което спира много нишки да работят едновременно. Можете да изключите това чрез флаг, стига да сте наясно с потенциалните проблеми, свързани с паралелното програмиране.

Заключение

Много пъти, когато започнете да програмирате на Python или други езици, срещате ограничения на езика, компилатора или нещо друго. Когато сте в тази ситуация, трябва да спрете и да помислите какво ограничение имате и да помислите колко други може да са имали същата ситуация. В случая с Python и NumPy много учени и разработчици са написали код, който се нуждае от бързо изпълнение. Това наследство е създало голям брой клонове, които могат да решат проблема ви, без да ви принуждават да превключвате езика или да пишете ново разширение на този конкретен език.

Най-добрите игри за игра с ръчно проследяване
Oculus Quest наскоро представи страхотната идея за ръчно проследяване без контролери. С непрекъснато нарастващия брой игри и дейности, които изпълнява...
Как да покажете OSD наслагване в приложения на цял екран за Linux и игри
Играта на цял екран или използване на приложения в режим на цял екран без разсейване може да ви откъсне от съответната системна информация, видима в п...
Топ 5 карти за залавяне на игри
Всички сме виждали и обичаме поточни игри в YouTube. PewDiePie, Jakesepticye и Markiplier са само някои от най-добрите геймъри, които са спечелили мил...