Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 1906|Jawab: 1

[Kiat] [Terjemahan]. Fungsi pemotongan array NumSharp di NET/C#

[Salin tautan]
Dipaparkan pada 2025-1-10 12:17:13 | | | |

Berkat kemampuan pemotongan array baru NumSharp yang hebat, komunitas .NET selangkah lebih dekat untuk memiliki platform pembelajaran mesin sumber terbuka yang kuat.

Python adalah bahasa pembelajaran mesin sebagian karena memiliki perpustakaan hebat seperti NumPy dan TensorFlow. Namun, pengembang C# juga sangat membutuhkan perpustakaan sumber terbuka yang kuat untuk pembelajaran mesin dan ilmu data. NumSharp, port NumPy C# dari organisasi SciSharp STACK, baru-baru ini mengambil langkah maju yang besar dengan sepenuhnya menerapkan kemampuan pengiriman, memungkinkan pembuatan subset array N-dimensi sewenang-wenang sebagai tampilan data mentah yang efisien. Ini menjadikannya alat yang berguna untuk menggunakan C# untuk pembelajaran mesin bersama dengan TensorFlow.NET.


Apa masalahnya?

Jika Anda belum menggunakan NumPy, Anda mungkin tidak tahu seberapa hebat pemotongan itu. Array Python memungkinkan pengembalian sepotong array dengan mengindeks serangkaian elemen, sebagai berikut: a[start:stop:step]. Tetapi hanya dengan implementasi array kompleks NumPy, pemotongan menjadi teknik manipulasi data yang benar-benar kuat yang tanpanya pembelajaran mesin atau ilmu data tidak akan terbayangkan.

Untungnya, bagi mereka yang tidak bisa atau tidak ingin beralih ke Python untuk pembelajaran mesin (yang juga saya buat), NumSharp membawa kemampuan ini ke dunia .NET. Sebagai salah satu pengembang di NumSharp, saya telah memperkenalkan Anda pada beberapa kasus penggunaan pemotongan penting dengan contoh cuplikan kode di C#. Perhatikan bahwa pengindeksan tidak dapat dilakukan di C# dengan cara yang sama seperti di Python karena perbedaan sintaks bahasa. Namun, kami memutuskan untuk mempertahankan sintaks Python untuk definisi irisan, jadi kami menggunakan string untuk mengindeks irisan di C#. Lihat contoh ini untuk melihat seberapa dekat NumSharp dengan NumPy.




Potong kolom dari matriks di Python/NumPy

Saat ditulis dalam C# dengan NumSharp, kodenya hampir identik. Perhatikan bahwa irisan diindeks sedikit berbeda menggunakan string sebagai parameter untuk pengindeks.




Memotong kolom dari matriks di C#/NumSharp

Seperti yang Anda lihat, tim NumSharp telah berusaha keras untuk membuat kode semirip mungkin dengan Python. Ini sangat penting karena dengan cara ini, kode Python yang ada yang mengandalkan NumPy sekarang dapat dengan mudah di-porting ke C#.


Kasus penggunaan: Menggunakan beberapa tampilan data yang sama



Mampu meneruskan hanya bagian lokal dari data yang mendasarinya (yaitu, potongan kecil gambar besar) masuk dan keluar dari fungsi tanpa menyalin sangat penting untuk performa runtime, terutama untuk kumpulan data besar. Irisan diindeks menggunakan koordinat lokal, sehingga algoritme Anda tidak perlu mengetahui struktur global data Anda, secara efektif menyederhanakan hidup Anda dan memastikan performa maksimum karena duplikasi yang tidak perlu dihindari.


Kasus penggunaan: Tampilan jarang dan pemotongan rekursif



Tampilan array yang jarang dapat dibuat dengan menentukan langkah-langkah di luar awal dan akhir rentang irisan. Sejauh yang saya tahu, bahkan C# 8.0 dengan sintaks irisan array baru tidak dapat melakukan ini. Fitur ini menjadi sangat penting saat berhadapan dengan data yang diselingi. Anda dapat merancang algoritme untuk menangani data berkelanjutan dan memberikannya irisan jarang yang meniru sumber data berkelanjutan, meminimalkan kompleksitas algoritme Anda.


Pengirisan dapat diiris lebih lanjut, yang merupakan fitur yang sangat penting jika Anda berhadapan dengan data dimensi tinggi. Ini juga membantu mengurangi kompleksitas algoritme, karena Anda dapat mengurangi dimensi data dengan mengiris secara rekursif.


Kasus penggunaan: Memproses data dimensi tinggi secara efisien



Jika Anda perlu menganggap array data sebagai volume dan bekerja dengan bagian-bagiannya tanpa harus melakukan perhitungan transformasi koordinat yang luar biasa, maka .reshape() adalah teman Anda.
Semua array yang dibuat oleh atau operasi pemotongan adalah .reshape() hanya tampilan data asli. Saat Anda meniterasi, membaca, atau menulis elemen ke tampilan, Anda mengakses array data mentah. NumSharp secara transparan melakukan transformasi indeks yang sesuai untuk Anda, sehingga Anda dapat mengindeks irisan dengan koordinat relatif.


Kasus penggunaan: Membalikkan urutan elemen tanpa biaya tambahan

Irisan menggunakan langkah negatif sebenarnya membalikkan urutan irisan. Keuntungannya adalah tidak perlu menyalin atau menghitung data untuk melakukan ini, seperti IEnumerable.Reverse(). Perbedaannya adalah bahwa tampilan (hasil operasi a["::-1"]) menampilkan data dalam urutan terbalik, dan Anda dapat mengindeks ke urutan terbalik tanpa menghitungnya.


Kasus penggunaan: Kurangi kompleksitas dengan mengurangi dimensi

Saat bekerja dengan data dimensi tinggi, algoritme untuk data tersebut juga bisa menjadi sangat kompleks. Saat digunakan, volume dimensi tinggi apa pun dapat dikeluarkan. Ketika metode NumSharp NDArray ToString(), saya memperhatikan betapa sederhana dan indahnya algoritma dengan memotong volume ND secara sistematis dan rekursif menjadi volume (N-1)D, dll.

Pendekatan bagi-dan-taklukkan ini mengembalikan subvolume dimensi rendah dengan mengiris simbol rentang menggunakan simbol indeks NumSharp.

Simbol rentang vs. simbol indeks

Simbol rentang ["start:stop:step"] memungkinkan Anda mengakses subrentang volume tertentu dengan dimensi yang sama. Jadi meskipun Anda hanya memotong satu kolom dari matriks 2D, Anda masih akan mendapatkan matriks 2D dengan hanya satu kolom. Berikut adalah bagian singkat dari kode C# yang menunjukkan ini:



Potong kolom menggunakan simbol rentang

Simbol indeks memberi Anda irisan dimensi (N-1) di lokasi volume induk N-dimensi yang ditentukan. Jadi memotong kolom dari matriks 2D menggunakan simbol indeks memberi Anda vektor 1D:


Potong kolom menggunakan simbol indeks

Jika Anda belum melihat perbedaannya secara sekilas, berikut adalah dua definisi irisan di atas secara berdampingan, ange[":,2:3"] vs index[":,2"], yang berdampak besar pada hasilnya. Referensi lengkap untuk simbol irisan baru dapat ditemukan di wiki NumSharp.


Catatan: <T>ArraySlice

Dalam menerapkan pemotongan tampilan N-dimensi, saya menyimpulkan bahwa itu mungkin menarik untuk banyak area lain di .NET, jadi saya memecahnya menjadi pustaka mandiri saya sendiri yang disebut SliceAndDice. Ini fitur menjadi pembungkus ringan untuk mengindeks struktur data C# apa pun (seperti atau) ArraySlice<T>, dan memungkinkan Anda menggunakan mekanisme remodeling, pengirisan, dan tampilan yang sama tanpa semua perhitungan numerik berat lainnya. Hanya perlu beberapa ratus baris kode untuk mencapai kemampuan pemotongan yang sangat baik! T[]IList<T>


Bungkus

NumSharp baru-baru ini diberi mekanisme pemotongan dan tampilan yang sama, yang tidak diragukan lagi menjadikan NumPy salah satu perpustakaan terpenting dalam ekosistem pembelajaran mesin Python. SciSharp STACK adalah organisasi open source dari sejumlah kecil pengembang terampil yang telah bekerja sangat keras untuk menghadirkan fungsionalitas yang sama ke dunia .NET. Peningkatan terbaru NumSharp merupakan landasan penting dalam mencapai hal ini.


Asli:Login hyperlink terlihat.




Mantan:Kontrol versi file besar Git lfs
Depan:Rocky Linux 9 bangun di lan
 Tuan tanah| Dipaparkan pada 2025-1-10 12:18:43 |
NumSharp cocok untuk berbagai skenario, termasuk penelitian pendidikan, analisis keuangan, pemrosesan gambar, pembelajaran mendalam, dan banyak lagi.

NumSharp, sebagai bagian dari SciSharp.org, telah diintegrasikan ke dalam berbagai Ekosistem Komputasi Ilmiah NET. Berikut adalah beberapa item terkait dan sangat saling melengkapi yang direkomendasikan untuk Anda jelajahi lebih lanjut:

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

Kesimpulannya, NumSharp bukan hanya perpustakaan kuat yang berdiri sendiri, tetapi juga koneksi. Simpul kunci dalam komunitas komputasi ilmiah .NET.

Alamat Proyek NumSharp:https://github.com/SciSharp/NumSharp
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com