Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 1906|Resposta: 1

[Gorjetas] [Tradução]. Função de fatiamento de array NumSharp em NET/C#

[Copiar link]
Postado em 10-01-2025 12:17:13 | | | |

Graças às excelentes novas capacidades de fatiamento de array da NumSharp, a comunidade .NET está um passo mais perto de ter uma poderosa plataforma de aprendizado de máquina open-source.

Python é uma linguagem de aprendizado de máquina em parte porque possui ótimas bibliotecas como NumPy e TensorFlow. No entanto, desenvolvedores de C# também têm grande necessidade de bibliotecas open-source poderosas para aprendizado de máquina e ciência de dados. O NumSharp, a versão NumPy C# da organização SciSharp STACK, recentemente deu um grande avanço ao implementar totalmente capacidades de fatiamento, permitindo a criação de subconjuntos arbitrários de arrays N-dimensionais como visualizações eficientes de dados brutos. Isso o torna uma ferramenta útil para usar C# em aprendizado de máquina em conjunto com TensorFlow.NET.


Qual é o problema?

Se você nunca usou o NumPy, provavelmente não sabe o quão bom é o slice. Arrays Python permitem retornar uma fatia de um array indexando uma série de elementos, da seguinte forma: a[start:stop:step]. Mas só com a implementação complexa de arrays do NumPy é que o sliceing se torna uma técnica de manipulação de dados realmente poderosa, sem a qual o aprendizado de máquina ou a ciência de dados seriam inimagináveis.

Felizmente, para quem não pode ou não quer mudar para Python para aprendizado de máquina (que eu também fiz), o NumSharp traz essa capacidade para o mundo .NET. Como um dos desenvolvedores da NumSharp, apresentei alguns casos importantes de uso de fatiamento com trechos de código de exemplo em C#. Note que a indexação não pode ser feita em C# da mesma forma que em Python devido a diferenças na sintaxe da linguagem. No entanto, decidimos manter a sintaxe em Python para definições de fatias, então usamos strings para indexar fatias em C#. Confira este exemplo para ver o quão próximo o NumSharp é do NumPy.




Corte a coluna da matriz em Python/NumPy

Quando escrito em C# com NumSharp, o código é quase idêntico. Note que as fatias são indexadas de forma um pouco diferente usando strings como parâmetros para o indexador.




Recorte colunas de uma matriz em C#/NumSharp

Como você pode ver, a equipe da NumSharp se esforçou muito para tornar o código o mais parecido possível com o Python. Isso é muito importante porque, dessa forma, o código Python existente que depende do NumPy pode ser facilmente portado para C#.


Caso de uso: Usar múltiplas visões dos mesmos dados



Ser capaz de passar apenas partes locais dos dados subjacentes (ou seja, pequenos blocos de imagens grandes) para dentro e para fora de funções sem copiar é fundamental para o desempenho em tempo de execução, especialmente para conjuntos de dados grandes. Os slices são indexados usando coordenadas locais, então seu algoritmo não precisa conhecer a estrutura global dos seus dados, simplificando efetivamente sua vida e garantindo o máximo desempenho, pois a duplicação desnecessária é evitada.


Casos de uso: Visualizações esparsas e fatiamento recursivo



Uma visão esparsa de um array pode ser criada especificando etapas além do início e do fim do intervalo de fatia. Pelo que sei, nem mesmo o C# 8.0 com a nova sintaxe de fatia do array consegue fazer isso. Essa característica se torna muito importante ao lidar com dados entrelaçados. Você pode projetar seu algoritmo para lidar com dados contínuos e fornecer a ele fatias esparsas que imitam fontes de dados contínuas, minimizando a complexidade do seu algoritmo.


O fatiamento pode ser mais fatiado, o que é uma característica muito importante se você estiver lidando com dados de alta dimensão. Isso também ajuda a reduzir a complexidade do algoritmo, pois você pode diminuir a dimensionalidade dos dados por fatiamento recursivo.


Caso de uso: Processar dados de alta dimensão de forma eficiente



Se você precisa pensar em um array de dados como um volume e trabalhar com suas partes sem precisar fazer cálculos incríveis de transformação de coordenadas, então .reshape() é seu amigo.
Todos os arrays criados por operações de fatiamento são .reshape() apenas uma visualização dos dados originais. Quando você itera, lê ou escreve elementos em uma visualização, você acessa o array de dados brutos. O NumSharp realiza transparentemente as transformações de índice apropriadas para você, para que você possa indexar fatias com coordenadas relativas.


Caso de uso: Reverter a ordem dos elementos sem custo adicional

Fatias usando passos negativos na verdade invertem a ordem das fatias. A vantagem é que não precisa copiar ou enumerar dados para isso, assim como o IEnumerable.Reverse(). A diferença é que a visualização (resultado da operação a["::-1"]) exibe os dados em ordem inversa, e você pode indexar essa sequência invertida sem enumerá-la.


Caso de uso: Reduzir a complexidade reduzindo dimensões

Ao trabalhar com dados de alta dimensão, os algoritmos desses dados também podem se tornar muito complexos. Em uso, qualquer volume de alta dimensão pode ser salido. Quando o método NumSharp do ToString() se tornou NDArray, percebi como o algoritmo se tornou simples e bonito ao cortar sistematicamente e recursivamente volumes ND em volumes (N-1)D, etc.

Essa abordagem de dividir para conquistar retorna subvolumes de baixa dimensão ao fatiar os símbolos de faixa usando os símbolos de índice do NumSharp.

Símbolo de faixa vs. símbolo índice

O símbolo de alcance ["start:stop:step"] permite acessar um subintervalo de um determinado volume com a mesma dimensão. Então, mesmo que você corte apenas uma coluna da matriz 2D, ainda assim terá uma matriz 2D com apenas uma coluna. Aqui está um pequeno trecho de código C# que demonstra isso:



Fatie a coluna usando o símbolo de intervalo

O símbolo índice fornece uma fatia (N-1) dimensional na localização especificada do volume pai N-dimensional. Então, cortar uma coluna de uma matriz 2D usando símbolos de índice te dá um vetor 1D:


Colunas de fatia usando símbolos de índice

Se você não viu a diferença à primeira vista, aqui estão as duas definições de fatias acima, lado a lado, ange[:,2:3"] vs index[":,2"], que têm grande impacto nos resultados. Uma referência completa ao novo símbolo de fatia pode ser encontrada na wiki do NumSharp.


Nota: <T>ArraySlice

Ao implementar o sfaing de visões N-dimensionais, concluí que poderia ser interessante para muitas outras áreas do .NET, então o dividi em minha própria biblioteca independente chamada SliceAndDice. Ele é um wrapper leve para indexar qualquer estrutura de dados em C# (como ou) <T>ArraySlice, e permite usar os mesmos mecanismos de remodelação, fatiamento e visualização sem todos os outros cálculos numéricos pesados. São necessárias apenas algumas centenas de linhas de código para alcançar excelentes capacidades de fatiamento! T[]IList<T>


Envolvente

Recentemente, o NumSharp recebeu o mesmo mecanismo de fatiamento e visualização, o que sem dúvida faz do NumPy uma das bibliotecas mais importantes do ecossistema de aprendizado de máquina em Python. A SciSharp STACK é uma organização open source composta por um pequeno número de desenvolvedores qualificados que trabalharam muito para trazer a mesma funcionalidade para o mundo .NET. As melhorias mais recentes da NumSharp são uma pedra fundamental para alcançar isso.


Original:O login do hiperlink está visível.




Anterior:Controle de versões de arquivos grandes Git LFS
Próximo:Rocky Linux 9 wake na LAN
 Senhorio| Postado em 10-01-2025 12:18:43 |
O NumSharp é adequado para diversos cenários, incluindo pesquisa educacional, análise financeira, processamento de imagens, deep learning e muito mais.

O NumSharp, como parte do SciSharp.org, foi integrado a uma ampla gama de NET Scientific Computing Ecosystem. Aqui estão alguns itens relacionados e altamente complementares que são recomendados para você explorar mais:

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

Em conclusão, o NumSharp não é apenas uma biblioteca poderosa independente, mas uma conexão. Um nó chave na comunidade de computação científica do .NET.

Discurso do Projeto NumSharp:https://github.com/SciSharp/NumSharp
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com