Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

145
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!