2010-03-02 9 views

Respuesta

6

El array2D function su vez, cualquier seq<#seq<'T>> en un 'T [,] así que debería funcionar para convertir un grupo de matrices 1D en una matriz 2D.

let arr1 = [| 1; 2; 3 |] 
let arr2 = [| 4; 5; 6 |] 

let combined = array2D [| arr1; arr2 |] 
0

No creo que haya nada incorporado para manejar esto. Sin embargo, puede definir su propio método reutilizable basado en Array2D.init o Array2D.blit. Si necesita combinar varias columnas en un todo lógico, creo que con frecuencia sería más conveniente usar una matriz de matrices en lugar de una matriz 2D (y, en general, las operaciones de matriz 1D en .NET son significativamente más rápidas que las de múltiples operaciones de matriz dimensional).

+0

gracias. esto es muy útil. yo había pensado variedad de matriz es el mismo que array2D en F #. – ahala

3

Por lo que yo puedo ver, no hay ninguna función # biblioteca F, que convertiría varias matrices 1D en un único array 2D, pero usted puede escribir su propia función usando Array2D.init:

let joinInto2D (arrays:_[][]) = 
    Array2D.init arrays.Length (arrays.[0].Length) (fun i j -> 
    arrays.[i].[j]) 

Recibe una matriz de matrices, por lo que cuando lo llame, le dará una matriz que contiene todas las matrices que desea unir (por ejemplo, [| arr1; arr2 |] para unir dos matrices). La función concatena matrices 1D múltiples en una única matriz 2D que contiene una fila para cada matriz de entrada. Supone que la longitud de todas las matrices dadas es la misma (puede ser una buena idea agregar una verificación para verificar eso, por ejemplo usando Array.forall). La función init crea una matriz de las dimensiones especificadas y luego llama a nuestra función lambda para calcular un valor para cada elemento: en la función lambda, utilizamos la fila como un índice en la matriz de matrices y la columna como un índice en el individuo formación.

Este es un ejemplo que muestra cómo utilizar la función:

> let arr1 = [| 1; 2; 3 |] 
    let arr2 = [| 4; 5; 6 |];; 

> joinInto2D [| arr1; arr2 |];; 
val it : int [,] = [[1; 2; 3] 
        [4; 5; 6]] 

EDIT: Ya existe una función para hacer que - agradable! Voy a dejar la respuesta en este caso, ya que todavía puede ser útil, por ejemplo, si desea unirse a matrices 1D como columnas (en lugar de filas, que es el comportamiento implementado por array2D.

+0

gracias Tom, sí Siempre quiero unir matrices como columnas. – ahala

Cuestiones relacionadas