Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Numero mas Repetido en un array 2D

Que tal amigos, estoy trabajando en un ejercicio en el cual tengo una array de 5*3 y necesito sacar el numero que mas se repite en un indicador como puedo hacer esto?? Gracias 🙂

0 kudos
Mensaje 1 de 5
4.971 Vistas

 

Hola que tal jaimico360

 

Por lo que comentas creo que lo mas conveniente es usar dos ciclos ya sea For/While, For/For donde harémos un comportamiento análogo a escaner dentro del arreglo.

 

Te invito a que entres a éste tópico de la comunidad espero que sea de utilidad para tu aplicación. Nos comparten algunos buenos ejemplos de referencia.

 

 

Saludos cordiales, ánimo tu aplicación saldrá

 

 

 

 

Héctor Nuñez
Applications Engineer at National Instruments
0 kudos
Mensaje 2 de 5
4.952 Vistas

Hola jaimico360,

la solución a tu pregunta en mi opinión va a ser un poco más complicada de lo que parece si estás trabajando con numeros decimales. El tema es que la representación de estos numeros en la memoria de la PC no es exacta, sino que tiene alguna imprecisión debida a problemas técnicos que si quieres puedes aprender leyendo esta página entre las muchas que hay en la internet sobre el tema.

 

Mientras que lo que te sugirió Hector puede ir bien trabajando con enteros y boleanos, no puedes usar el mismo método si trabajas con dobles. El tema es que en mi máquina y con el LV 2015 el resultado de (10 / 10 / 3) y (10 / 3 / 10) ¡no son iguales! Emoticono sorprendido En tu máquina y/u con una versión diferente del LV el resultado podría ser otro.

 

Ahora bien, no nos dices de donde salen los números en tu matriz, pero es posibile que sean resultados de pruebas u cálculos semejantes, por lo que pueden ser muy cercanos unos a otros. En esta situación, con una simple comparación puedes dar con que son quince números diferentes aunque parezca que algunos sean repetidos si los representas con pocos decimales. Ahora bien, esto puede darte una sugerencia: si para ti es suficiente representarlos con 2 decimales, puedes simplemente multiplicar por 100 y pasar el arreglo a enteros, haciendo las comparaciones en el arreglo resultante. Esto ya puede darte un buen resultado, y resulta más facil su puedes sortear el arreglo.

 

 

 

Una alternativa si quieres conserval los números en doble precisión es usar la función de Histogram que divide el arreglo en grupos y restituye la cuenta de cuantos caben en cada grupo y el valor central de cada estos. Un tema importante es definir la amplitud de los grupos: en el ejemplo que te pongo divido simplemente en 10 grupos pero tu puedes decidir hacer algo diferente. Aquí tienes al código y un pantallazo de ejemplo: 'more frequent' es el valor central del grupo con mayor cuenta. Ten en cuenta que el valor central puede no coincidir con un número que existe en el arreglo, pero será bastante cercano si eliges bien los grupos.

 

Get More Frequent.png

Screenshot 2016-06-04 00.47.32.png

 

 



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 3 de 5
4.930 Vistas

jaimico360 escribió:

Que tal amigos, estoy trabajando en un ejercicio en el cual tengo una array de 5*3 y necesito sacar el numero que mas se repite en un indicador como puedo hacer esto?? Gracias 🙂


Esto más bien parece un ejercicio teorico (sin mayor aplicación práctica) con el objetivo de aprender el manejo de las herramientas de LabVIEW, por lo que lo más probable es que se trate de números enteros.

 

Como EttoreNunez, te propongo que pases a un Array de una dimensión, y con todos los elementos (mediante bucles For) y la función Search 1D Array busques las veces que se repite cada elemento (aquí mediante bucles White pues lo tendrás que buscar recursivamente).

Vas anotando el número de veces que se repite (la iteración i del bucle While) y una vez que terminas con todos los elementos eliges el máximo.

 

Saludos y suerte.

_________________________________________
https://aulamoisan.uva.es

0 kudos
Mensaje 4 de 5
4.922 Vistas

Gracias a todos por responder, al final he usado for loop y while loop para el conteo y usando un case desde la interaccion.. con posibilidades del 1-10 que  son los numeros posibles.. Gracias de todas formas 🙂

0 kudos
Mensaje 5 de 5
4.900 Vistas