todos tiene subconjuntos primaria potencia para otro los hacer elementos ejercicios ejemplos cuantos contenido considere conjuntos conjunto como c# arrays cuda cuda.net

c# - tiene - Obtener subconjuntos de matriz de manera eficiente



ejercicios de subconjuntos para primaria (4)

De acuerdo, había malinterpretado la pregunta antes.

Lo que quiere es System.Buffer.BlockCopy o System.Array.Copy .

Las formas LINQ serán horriblemente ineficientes. Si puedes reutilizar el búfer en el que estás copiando, eso también ayudará a la eficiencia, evitando crear una nueva matriz cada vez, solo copia encima. Sin embargo, a menos que pueda dividir su "gran" matriz igualmente, necesitará una nueva para el último caso.

¿Hay una manera eficiente de tomar un subconjunto de una matriz C # y pasarlo a otra parte de código (sin modificar la matriz original)? Yo uso CUDA.net que tiene una función que copia una matriz a la GPU. Me gustaría, por ejemplo, pasar la función una décima parte de la matriz y así copiar cada décimo de la matriz a la GPU por separado (para propósitos de canalización).

Copiar la matriz de esta manera debe ser tan eficiente como copiarla de una vez. Se puede hacer con un código inseguro y simplemente haciendo referencia a la ubicación correcta de la memoria, pero aparte de eso, no estoy seguro. La función CopyTo copia toda la matriz a otra matriz, por lo que no parece útil.


No estoy seguro de lo eficiente que es esto, pero ...

int[] myInts = new int[100]; //Code to populate original arrray for (int i = 0; i < myInts.Length; i += 10) { int[] newarray = myInts.Skip(i).Take(10).ToArray(); //Do stuff with new array }


Puede usar métodos de extensión y retorno de rendimiento:

public static IEnumerable Part<T>(this T[] array, int startIndex, int endIndex ) { for ( var currentIndex = startIndex; currentIndex < endIndex; ++currentIndex ) yield return array[currentIndex]; }


Puedes probar Marshal. Copia si necesitas pasar de una matriz de bytes a un puntero no administrado. Eso evita crear código inseguro usted mismo.

Editar: Esto claramente solo funcionaría si reimplementas su API. Lo siento - incomprendido. Desea un método de subcampo eficiente.

Me sorprende que lo que realmente quieres es una API en la clase original de la forma

void CopyToGpu(byte[] source, int start, int length);