Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

152
Visualizações
Trocear datos de una matriz de matrices

Antes de marcar esto como respondido por otra pregunta , tenga en cuenta que esto es una matriz de matrices, no una matriz plana, además, el número que he dado es un ejemplo, solo los he mostrado para que pueda ver visualmente lo que está sucediendo.

Estoy tratando de recorrer una matriz de matrices. Tengo la siguiente matriz: -

 [ [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 2, 1, 6, 5, 4, 9, 8, 7], [6, 5, 4, 9, 8, 7, 3, 2, 1], [7, 8, 9, 3, 2, 1, 6, 5, 4] ]

¿Cómo es posible transformar esta matriz en trozos de 3x3, por ejemplo: -

 [ [1, 2, 3, 1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6, 4, 5, 6], [7, 8, 9, 7, 8, 9, 7, 8, 9], [3, 2, 1, 6, 5, 4, 9, 8, 7], [6, 5, 4, 9, 8, 7, 3, 2, 1], [7, 8, 9, 3, 2, 1, 6, 5, 4], ]

Como puede ver en la matriz anterior, la he fragmentado usando los primeros 3 valores de cada matriz y luego el segundo 3n de cada matriz y, por último, los 3n finales de cada matriz.

Entonces, la matriz se dividiría de la siguiente manera: -

 1 2 3 | 4 5 6 | 7 8 9 1 2 3 | 4 5 6 | 7 8 9 1 2 3 | 4 5 6 | 7 8 9 --------------------- 3 2 1 | 6 5 4 | 9 8 7 6 5 4 | 9 8 7 | 3 2 1 7 8 9 | 3 2 1 | 6 5 4

Intenté recorrer cada línea y restablecer el recuento de columnas cuando alcanza un incremento y aumentar la fila, pero esto no funcionó.

¿Puedo actualizar la pregunta con intentos anteriores si esto es de alguna ayuda? También solo una nota, la matriz será de diferentes tamaños pero siempre divisible por un número en particular, para el ejemplo anterior he elegido el número 3.

He actualizado la pregunta con más información. La matriz de matrices siempre será divisible por un número específico, este ejemplo muestra un número divisible de 3.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Esto se puede resolver con un fragmento según esta pregunta . Divida la matriz en fragmentos combinados con un zip según esteequivalente de Javascript de la función zip de Python.

Esto tiene la ventaja de poder invertir la operación para volver al original.

 /** @see: https://stackoverflow.com/questions/8495687/split-array-into-chunks */ function chunk(array, chunk) { let result = []; for (let i = 0; i < array.length; i += chunk) { result.push(array.slice(i, i + chunk)); } return result; } /** @see: https://stackoverflow.com/questions/4856717/javascript-equivalent-of-pythons-zip-function */ function zip(...rows) { return [...rows[0]].map((_, c) => rows.map((row) => row[c])); } const array = [ [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 2, 1, 6, 5, 4, 9, 8, 7], [6, 5, 4, 9, 8, 7, 3, 2, 1], [7, 8, 9, 3, 2, 1, 6, 5, 4], ]; const result = chunk(array, 3) .flatMap((innerChunk) => zip(...innerChunk.map((arr) => chunk(arr, 3))) .map((arr) => arr.flat()) ); console.log(result.map((a) => a.join(', '))); // Allows the result to be reverted to the original const reversed = chunk(result, 3) .flatMap((innerChunk) => zip(...innerChunk.map((arr) => chunk(arr, 3))) .map((arr) => arr.flat()) ); console.log(reversed.map((a) => a.join(', ')));

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede hacerlo con un bucle anidado, cortando la matriz cada vez según el tamaño de la matriz externa.

 const arr = [ [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9] ]; let out = []; for(let i in arr) { out.push([]);} arr.forEach((e, i) => { let scale = e.length / arr.length; for(let j in arr) { out[j] = out[j].concat(e.slice(j * scale, j * scale + scale)); } }); console.log(out);

Aquí está una vez más con su matriz original antes de su edición:

 const arr = [ [1, 3, 2, 5, 2, 4, 3, 6, 8], [1, 4, 3, 6, 7, 3, 6, 4, 5], [2, 4, 1, 4, 6, 3, 7, 9, 7] ]; let out = []; for(let i in arr) { out.push([]);} arr.forEach((e, i) => { let scale = e.length / arr.length; for(let j in arr) { out[j] = out[j].concat(e.slice(j * scale, j * scale + scale)); } }); console.log(out);

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda