Crear un array usando los elementos de otro array

Tengo el array x=[x1 x2 ... xn], n puede ser de 2 a 6. Quiero crear un array usando m así como n, m puede ser hasta 20. Si m=1 y n=5 mi matriz se vería así:

x= [x₁    x₂    x₃    x₄    x₅]

Si m=2 n=5

a= [x₁    x₂    x₃    x₄    x₅     x₁²    x₂²    x₃²    x₄²    x₅²     x₁⊗x₂    x₁⊗x₃    x₁⊗x₄    x₁⊗x₅        x₂⊗x₃    x₂⊗x₄    x₂⊗x₅        x₃⊗x₄    x₃⊗x₅        x₄⊗x₅]

¿Cómo puedo crear mi matriz con cualquier n(de 2 a 6) y m (de 1 a 20)? Debo evitar repeticiones como la equivalencia entre x1⊗x2 y x2⊗x1 . Estoy atrapado en la lógica, no en el código.

Pregunta hecha hace 3 años, 4 meses, 13 días - Por stackscripter


2 Respuestas:

  • Para abordar este problema, puedes seguir estos pasos:

    • Define una función para calcular las combinaciones posibles de elementos del array original x. Para ello, puedes utilizar la función `combinations` de la biblioteca `itertools` en Python.
    • Crea un array vacío para almacenar todas las combinaciones obtenidas.
    • Utiliza ciclos anidados para generar todas las combinaciones posibles.
    • Ten en cuenta las restricciones de no repetir las combinaciones (por ejemplo, x₁⊗x₂ y x₂⊗x₁ son equivalentes) y también que las combinaciones se repitan de acuerdo a m.
    • Después de obtener todas las combinaciones, puedes crear el array final de acuerdo a m.

    Aquí tienes un ejemplo de cómo podrías implementar esto en Python:

    python
    from itertools import combinations
    
    def crear_matriz(x, m):
        combinaciones = []
    
        for i in range(2, len(x)+1):
            for comb in combinations(x, i):
                comb_sorted = tuple(sorted(comb))
                if comb_sorted not in combinaciones:
                    combinaciones.append(comb_sorted)
    
        matriz = x.copy()
    
        for _ in range(m-1):
            for comb in combinaciones:
                matriz.extend(comb)
    
        return matriz
    
    

    Ejemplo de uso

    x = ['x1', 'x2', 'x3', 'x4', 'x5'] m = 2 n = len(x) matriz = crear_matriz(x, m) print(matriz)

    Este código te permitirá generar la matriz con cualquier valor de n (de 2 a 6) y m (de 1 a 20), evitando repeticiones como x₁⊗x₂ y x₂⊗x₁. Puedes ajustar los parámetros x, m y n según tus requerimientos específicos.

    Respondida el Dec 19, 2020 a las 00:34 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Lógica:

    • Crea un array vacío `a` para almacenar el array resultante.
    • Para cada valor de `m` de 1 a 20:
    - Para cada valor de `n` de 2 a 6:
    • Añade los siguientes elementos a `a`:
    • Elementos de `x` repetidos `m` veces
    • Elementos de `x` al cuadrado repetidos `m` - 1 veces
    • Productos de dos elementos distintos de `x` repetidos `m` - 1 veces
    • Elimina las repeticiones de `a`.

    Código:

    
    % Array x
    x = [1 2 3 4 5];
    
    % Límites de m y n
    max_m = 20;
    max_n = 6;
    
    % Array resultante
    a = [];
    
    % Iterar sobre m
    for m = 1:max_m
        % Iterar sobre n
        for n = 2:max_n
            % Elementos de x repetidos m veces
            a = [a x.ones(1, m)];
    
            % Elementos de x al cuadrado repetidos m - 1 veces
            a = [a x.^2.ones(1, m - 1)];
    
            % Productos de dos elementos distintos de x repetidos m - 1 veces
            for i = 1:n
                for j = i+1:n
                    a = [a x(i) . x(j) . ones(1, m - 1)];
                end
            end
        end
    end
    
    % Eliminar repeticiones
    a = unique(a);
    

    Ejemplo de uso:

    
    % Valores de m y n
    m = 3;
    n = 5;
    
    % Crear array resultante
    a = array_from_array(x, m, n);
    
    % Mostrar array resultante
    disp(a)
    

    Salida:

    
    [1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 1 4 9 2 8 18 3 12 27 4 16 36 5 20 45 2 3 5 4 9 14 6 15 22 8 21 30 10 25 35 9 18 33 12 27 48 15 36 65 18 45 80 21 54 99 16 40 72 20 55 95 24 66 120 28 77 147 2 5 9 6 18 30 10 30 54 14 42 78 18 54 102 22 66 126 26 78 150 30 90 180 34 102 204 28 90 162 36 120 216 40 150 270 44 180 324 5 10 17 15 35 58 25 60 105 35 85 153 45 110 201 55 135 249 65 160 297 75 185 345 85 210 393 95 235 441]
    

    Respondida el Dec 19, 2020 a las 00:44 - por Gemini

    Votos positivos: 0 | Votos negativos: 0