Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 1906|Yanıt: 1

[İpucu] [Çeviri]. NET/C#'da NumSharp dizi dilimleme fonksiyonu

[Bağlantıyı kopyala]
2025-1-10 tarihinde yayınlandı 12:17:13 | | | |

NumSharp'ın harika yeni dizi dilimleme yetenekleri sayesinde, .NET topluluğu güçlü bir açık kaynak makine öğrenimi platformuna bir adım daha yaklaştı.

Python, NumPy ve TensorFlow gibi harika kütüphanelere sahip olduğu için bir makine öğrenimi dili. Ancak, C# geliştiricilerinin makine öğrenimi ve veri bilimi için güçlü açık kaynak kütüphanelerine de büyük ihtiyacı vardır. NumSharp, SciSharp STACK organizasyonunun NumPy C# portu, son zamanlarda dilimleme yeteneklerini tam olarak uygulayarak büyük bir adım attı; böylece N-boyutlu dizilerin rastgele alt kümelerinin ham verinin verimli görünümleri olarak oluşturulmasına olanak tanıdı. Bu da onu TensorFlow.NET ile birlikte makine öğrenimi için C# kullanmak için faydalı bir araç haline getirir.


Ne büyük mesele var ki?

NumPy kullanmadıysanız, dilimlemenin ne kadar harika olduğunu muhtemelen bilmiyorsunuzdur. Python dizileri, bir dizi öğeyi indeksleyerek dizinin bir dilimini döndürmeye olanak tanır: a[start:stop:step]. Ancak ancak NumPy'nin karmaşık dizi uygulamasıyla dilimleme gerçekten güçlü bir veri işleme tekniği haline geliyor; onsuz makine öğrenimi veya veri bilimi hayal edilemez olurdu.

Neyse ki, makine öğrenimi için Python'a geçemeyenler veya istemeyenler için (ki ben de yaptım), NumSharp bu özelliği .NET dünyasına getiriyor. NumSharp'taki geliştiricilerden biri olarak, C# dilinde örnekler kod parçaları ile önemli dilimleme kullanım durumlarıyla sizi tanıttım. Dil sözdizimi farklılıkları nedeniyle indeksleme, Python'daki gibi C# dilinde yapılamaz. Ancak, dilim tanımları için Python sözdizimini korumaya karar verdik, bu yüzden dilimleri C#'da indekslemek için dizeler kullandık. NumSharp'ın NumPy'ye ne kadar yakın olduğunu görmek için bu örneğe göz atın.




Python/NumPy'deki matrisin sütununu çıkarın

C# ile NumSharp ile yazıldığında kod neredeyse aynıdır. Dilimler, dizileri indeksleyici için parametreler olarak kullanarak biraz farklı şekilde indeksleniyor.




C#/NumSharp ile bir matristen sütunları kesin

Gördüğünüz gibi, NumSharp ekibi kodu mümkün olduğunca Python'a benzetmek için çok çaba harcadı. Bu çok önemlidir çünkü bu şekilde, NumPy'ye dayanan mevcut Python kodu artık kolayca C#'a taşınabilir.


Kullanım durumu: Aynı verinin birden fazla görünümünü kullanmak



Kopyalamadan fonksiyonlara girip çıkabilmek, özellikle büyük veri setleri için çalışma zamanı performansı için kritik öneme sahiptir. Dilimler yerel koordinatlarla indekslenir, bu yüzden algoritmanız verilerinizin küresel yapısını bilmesine gerek kalmaz, böylece hayatınızı kolaylaştırır ve gereksiz tekrarlamadan kaçınarak maksimum performansı sağlar.


Kullanım durumları: Seyrek görünümler ve özyinelemeli dilimleme



Bir dizinin seyrek görünümü, dilim aralığının başlangıcı ve sonunun ötesinde adımlar belirtilerek oluşturulabilir. Bildiğim kadarıyla, yeni dizi dilim söz dizimi ile C# 8.0 bile bunu yapamıyor. Bu özellik, aralı verilerle ilgilenirken çok önemli hale gelir. Algoritmanızı sürekli veriyi işleyecek şekilde tasarlayabilir ve sürekli veri kaynaklarını taklit eden seyrek dilimler sağlayarak algoritmanızın karmaşıklığını en aza indirebilirsiniz.


Dilimleme daha da dilimlenebilir, bu yüksek boyutlu verilerle ilgileniyorsanız çok önemli bir özelliktir. Bu aynı zamanda algoritmanın karmaşıklığını azaltmaya yardımcı olur; çünkü verinin boyutluluğunu özyinelemeli dilimleme yoluyla azaltabilirsiniz.


Kullanım durumu: Yüksek boyutlu verileri verimli şekilde işlemek



Bir veri dizisini bir hacim olarak düşünmeniz ve parçaları ile inanılmaz koordinat dönüşümü hesaplamaları yapmadan çalışmanız gerekiyorsa, .reshape() sizin dostunuzdur.
Dilimleme işlemleriyle oluşturulan veya dilimleme işlemleriyle oluşturulan tüm diziler .reshape() olarak sadece orijinal verinin bir görünümüdür. Bir görünüme öğeler yineleştirdiğinizde, okuduğunuzda veya yazdığınızda, ham veri dizisine erişirsiniz. NumSharp, sizin için uygun indeks dönüşümlerini şeffaf bir şekilde yapar, böylece göreceli koordinatlarla dilim indeksleyebilirsin.


Kullanım durumu: Elemanların sırasını ek maliyet olmadan tersine çevirmek

Negatif adımlarla dilimler aslında dilimlerin sırasını tersine çeviriyor. Bunun avantajı, IEnumerable.Reverse() gibi veri kopyalaması veya sayması gerekmemesidir. Fark şu ki, görünüm (a["::-1"] işleminin sonucu) veriyi ters sırayla gösterir ve bu ters diziyi saymadan indeksleyebilirsiniz.


Kullanım durumu: Boyutları küçülterek karmaşıklığı azaltmak

Yüksek boyutlu verilerle çalışırken, o verilerin algoritmaları da çok karmaşık hale gelebilir. Kullanımda, herhangi bir yüksek boyutlu hacim çıkış yapılabilir. ToString()'nin NumSharp yöntemi NDArray'de, algoritmanın ND hacimlerini sistematik ve özyinelemeli olarak (N-1)D hacimlere vb. kesinleyerek ne kadar basit ve güzel hale geldiğini fark ettim.

Bu böl ve fethet yaklaşımı, NumSharp'ın indeks sembolleri kullanılarak aralık sembollerini dilimleyerek düşük boyutlu alt hacimler döndürür.

Aralık sembolü ile indeks sembolü

Aralık sembolü ["start:stop:step"] aynı boyutta belirli bir hacmin alt aralığına erişmenizi sağlar. Yani 2D matrisin sadece bir sütununu kesseniz bile, yine de sadece bir sütunlu 2D matris elde edeceksiniz. İşte bunu gösteren kısa bir C# kodu parçası:



Aralık sembolünü kullanarak sütunu dilimleyin

İndeks sembolü, N boyutlu ebeveyn hacminin belirtilen konumunda (N-1) boyutlu bir dilim verir. Yani indeks sembolleriyle 2B matristen bir sütun kestiğinizde 1B bir vektör elde edersiniz:


Sütunları indeks sembolleriyle dilimle

Farkı bir bakışta görmediyseniz, işte yukarıdaki iki dilim tanımı yan yana geliyor: ange[":,2:3"] vs index[":,2"], ve bunlar sonuçlar üzerinde büyük etkiye sahip. Yeni dilim sembolüne tam bir referans NumSharp wiki'de bulunabilir.


Not: <T>ArraySlice

N-boyutlu görünümlerin dilimlenmesini uygularken, .NET'in birçok diğer alanı için ilginç olabileceği sonucuna vardım ve bunu kendi bağımsız kütüphanem olan SliceAndDice'a ayırdım. Herhangi bir C# veri yapısını (örneğin ArraySlice) indekslemek için hafif bir wrapper <T>özelliğine sahiptir ve diğer ağır sayısal hesaplamalar olmadan aynı yeniden modelleme, dilimleme ve görüntüleme mekanizmalarını kullanmanıza olanak tanır. Mükemmel dilimleme yetenekleri elde etmek için sadece birkaç yüz satır kod yeterlidir! T[]IList<T>


Wraparound

NumSharp yakın zamanda aynı dilimleme ve görüntüleme mekanizmasını aldı ve bu da şüphesiz NumPy'yi Python makine öğrenme ekosistemindeki en önemli kütüphanelerden biri yapıyor. SciSharp STACK, aynı işlevselliği .NET dünyasına getirmek için çok çalışan az sayıda yetenekli geliştiricinin açık kaynak organizasyonudur. NumSharp'ın son iyileştirmeleri, bunu başarmakta önemli bir temel taştır.


Özgün:Bağlantı girişi görünür.




Önceki:Git lfs büyük dosya sürüm kontrolü
Önümüzdeki:Rocky Linux 9 Wake on lan
 Ev sahibi| 2025-1-10 tarihinde 12:18:43 tarihinde yayınlandı |
NumSharp, eğitim araştırmaları, finansal analiz, görüntü işleme, derin öğrenme ve daha fazlası gibi çeşitli senaryolar için uygundur.

NumSharp, SciSharp.org'nin bir parçası olarak çok çeşitli NET Bilimsel Hesaplama Ekosistemi. İşte daha fazla keşfetmeniz için önerilen bazı ilgili ve tamamlayıcı unsurlar:

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

Sonuç olarak, NumSharp sadece bağımsız ve güçlü bir kütüphane değil, aynı zamanda bir bağlantıdır. .NET bilimsel hesaplama topluluğunda kilit bir düğüm.

NumSharp Proje Adresi:https://github.com/SciSharp/NumSharp
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com