Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 1906|Відповідь: 1

[Чайови] [Переклад]. Функція нарізання масивів NumSharp у NET/C#

[Копіювати посилання]
Опубліковано 2025-1-10 12:17:13 | | | |

Завдяки чудовим новим можливостям NumSharp для розрізання масивів, спільнота .NET стала на крок ближче до створення потужної відкритої платформи машинного навчання.

Python — це мова машинного навчання, частково тому, що має чудові бібліотеки, такі як NumPy та TensorFlow. Однак розробникам C# також дуже потрібні потужні бібліотеки з відкритим кодом для машинного навчання та науки про дані. NumSharp, порт NumPy C# організації SciSharp STACK, нещодавно зробив великий крок уперед, повністю впроваджуючи можливості слайсингу, що дозволяє створювати довільні підмножини N-вимірних масивів як ефективний перегляд сирих даних. Це робить його корисним інструментом для використання C# у машинному навчанні разом із TensorFlow.NET.


У чому проблема?

Якщо ви не користувалися NumPy, то, ймовірно, не уявляєте, наскільки це чудово нарізання. Масиви Python дозволяють повертати зріз масиву шляхом індексації низки елементів, а саме: a[start:stop:step]. Але лише зі складною реалізацією масиву NumPy слайсинг стає справді потужною технікою маніпуляції даними, без якої машинне навчання чи наука про дані були б неможливими.

На щастя, для тих, хто не може або не хоче переходити на Python для машинного навчання (яке я теж створив), NumSharp приносить цю можливість у світ .NET. Як один із розробників у NumSharp, я познайомив вас із важливими кейсами використання слайсингу з прикладами коду на C#. Зверніть увагу, що індексація не може бути виконана в C# так само, як у Python, через відмінності в мовному синтаксисі. Однак ми вирішили зберегти синтаксис Python для визначень слайсів, тому використовували рядки для індексування срізів у C#. Перегляньте цей приклад, щоб побачити, наскільки NumSharp близький до NumPy.




Виріжте стовпець із матриці в Python/NumPy

При написанні на C# через NumSharp код майже ідентичний. Зверніть увагу, що срізи індексуються трохи інакше, за допомогою рядків як параметрів для індексера.




Вирізати стовпці з матриці в C#/NumSharp

Як бачите, команда NumSharp доклала багато зусиль, щоб зробити код максимально схожим на Python. Це дуже важливо, адже таким чином існуючий код Python, який базується на NumPy, тепер можна легко портувати на C#.


Кейс: використання кількох переглядів одних і тих самих даних



Можливість передавати лише локальні частини базових даних (тобто невеликі шматки великих зображень) у та з функцій без копіювання критично важлива для продуктивності під час виконання, особливо для великих наборів даних. Срізи індексуються за локальними координатами, тому вашому алгоритму не потрібно знати глобальну структуру ваших даних, що ефективно спрощує ваше життя і забезпечує максимальну продуктивність, оскільки уникається зайвого дублювання.


Сценарії використання: розріджені види та рекурсивне слайсування



Розріджений вигляд масиву можна створити, вказавши кроки за межами початку та кінця діапазону зрізів. Наскільки мені відомо, навіть C# 8.0 з новим синтаксисом array slice цього не робить. Ця особливість стає дуже важливою при роботі з переплетеними даними. Ви можете спроектувати свій алгоритм так, щоб обробляти безперервні дані та надати йому розріджені зрізи, які імітують безперервні джерела даних, мінімізуючи складність алгоритму.


Слайсінг можна розрізати далі, що є дуже важливою функцією, якщо ви маєте справу з високорозмірними даними. Це також допомагає зменшити складність алгоритму, оскільки можна зменшити розмірність даних шляхом рекурсивного слайзингу.


Кейс: Ефективна обробка високорозмірних даних



Якщо вам потрібно уявити масив даних як об'єм і працювати з його частинами без неймовірних обчислень перетворень координат, тоді .reshape() — ваш друг.
Усі масиви, створені за допомогою операцій слайсингу або слайсингу, є .reshape(), просто виглядом оригінальних даних. Коли ви ітеруєте, читаєте або записуєте елементи у вигляд, ви отримуєте доступ до сирого масиву даних. NumSharp прозоро виконує відповідні індексні трансформації для вас, тож ви можете індексувати зрізи з відносними координатами.


Кейс використання: Зворотний порядок елементів без додаткових витрат

Зрізи з від'ємними кроками фактично змінюють порядок зрізів. Перевага в тому, що для цього не потрібно копіювати чи перераховувати дані, як і IEnumerable.Reverse(). Різниця в тому, що вид (результат операції a["::-1"]) відображає дані у зворотному порядку, і ви можете індексувати цю інвертовану послідовність без її перерахування.


Кейс використання: Зменшення складності шляхом зменшення розмірів

При роботі з високовимірними даними алгоритми для цих даних також можуть ставати дуже складними. У використанні можна вивести будь-який великий обсяг. Коли метод NumSharp від ToString() застосував NDArray, я помітив, наскільки простим і красивим став алгоритм, систематично і рекурсивно розділяючи ND-томи на (N-1)D томи тощо.

Цей підхід «розділяй і володаруй» повертає низькорозмірні субтоми шляхом розрізання символів діапазону за допомогою індексних символів NumSharp.

Символ діапазону проти індексного символу

Символ діапазону ["start:stop:step"] дозволяє отримати доступ до піддіапазону заданого об'єму з тією ж розмірністю. Тож навіть якщо вирізати лише один стовпець 2D-матриці, все одно отримаєте 2D-матрицю з одним стовпцем. Ось короткий фрагмент коду на C#, який це демонструє:



Розрізайте стовпець за допомогою символу діапазону

Індексний символ дає (N-1) вимірний зріз у заданій точці N-вимірного батьківського об'єму. Отже, вирізаючи стовпець із 2D-матриці за допомогою індексних символів, ви отримуєте одномірний вектор:


Слайс-стовпці за допомогою індексних символів

Якщо ви не помітили різниці з першого погляду, ось два визначення слайсів, наведені вище поруч — ange[":,2:3"] проти index[":,2"], які суттєво впливають на результати. Повне посилання на новий символ зрізу можна знайти на вікі NumSharp.


Примітка: <T>ArraySlice

Впроваджуючи слайсінг N-вимірних видів, я дійшов висновку, що це може бути цікаво для багатьох інших сфер .NET, тому розбив її на власну окрему бібліотеку під назвою SliceAndDice. Він є легким обгорткою для індексації будь-якої структури даних C# (наприклад, ArraySlice) <T>і дозволяє використовувати ті ж механізми ремоделювання, слайсингу та перегляду без усіх інших важких чисельних обчислень. Достатньо кількох сотень рядків коду, щоб досягти відмінних можливостей слайсингу! T[]IList<T>


обхід

NumSharp нещодавно отримав такий самий механізм слайсингу та перегляду, що, без сумніву, робить NumPy однією з найважливіших бібліотек в екосистемі машинного навчання на Python. SciSharp STACK — це відкрита організація з невеликої кількості кваліфікованих розробників, які дуже доклали зусиль, щоб впровадити ту ж функціональність у світі .NET. Останні покращення NumSharp є важливим наріжним каменем для досягнення цієї мети.


Оригінальний:Вхід за гіперпосиланням видно.




Попередній:Контроль версування великого файлу Git LS
Наступний:Rocky Linux 9 пробудження на локальній мережі
 Орендодавець| Опубліковано 2025-1-10 12:18:43 |
NumSharp підходить для різних ситуацій, включно з освітніми дослідженнями, фінансовим аналізом, обробкою зображень, глибоким навчанням та іншими.

NumSharp, як частина SciSharp.org, інтегрований у широкий спектр Екосистема наукових обчислень NET. Ось кілька пов'язаних і дуже доповнюючих речей, які рекомендується дослідити далі:

ML.NET: Microsoft推出的开源机器学习框架, 用于训练和部署自定义的机器学习模型。
SciSharp.TensorFlow.Redist: 为.NET环境提供了TensorFlow的封装, 使开发者能够在.NET应用程序中使用TensorFlow执行深度学习任务。
MathNet.Numerics: 提供了一系列数学方法和统计计算工具, 与NumSharp相辅相成。

Підсумовуючи, NumSharp — це не просто самостійна потужна бібліотека, а зв'язок. Ключовий вузол у спільноті наукових обчислень .NET.

Адреса проєкту NumSharp:https://github.com/SciSharp/NumSharp
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com