vectores una programacion matriz matrices llenar identidad for extraer elementos columna agregar matlab vector zero

una - Insertar número variable de ceros entre elementos distintos de cero en un vector en MATLAB



matriz identidad en matlab (3)

Tengo un vector como:

a = [1,2,3,4,5,6...,n]

y me gustaría obtener un nuevo vector como este:

a_new = [1,0,0,2,0,0,3,0,0,4,0,0,5,0,0,6,...,0,0,n]

donde se inserta un número fijo de ceros (2 en el ejemplo anterior) entre los elementos distintos de cero. Si elijo zero_p=3 , el nuevo vector sería:

a_new = [1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,...,0,0,0,n]

etc.

¿Cómo puedo hacer esto?


Hay algunas maneras en que puedo pensar:

Producto Kronecker

El producto kronecker es excelente para esto. En Matlab, kron es lo que estás buscando:

a = 1:4; a = kron(a, [1 0 0]) ans = 1 0 0 2 0 0 3 0 0 4 0 0

o, generalizado,

a = 1:4; zero_p = 3; b = [1 zeros(1,zero_p-1)]; a = kron(a, b) ans = 1 0 0 2 0 0 3 0 0 4 0 0

Si desea que termine con un elemento distinto de cero, debe hacer un paso adicional:

a = a(1:end-zero_p);

O, si te gustan las frases ingeniosas, todo se puede hacer así:

a = 1:4; zero_p = 3; a = [kron(a(1:end-1), [1 zeros(1,zero_p-1)]), a(end)] ans = 1 0 0 2 0 0 3 0 0 4

Relleno cero

Probablemente el método más simple y el mejor rendimiento:

a = 1:4; zero_p = 3; a = [a; zeros(zero_p, size(a, 2))]; a = a(1:end-zero_p);

Multiplicación de matriz

También es sencillo, fácil de leer y de gran rendimiento, aunque podría ser excesivo para muchas situaciones distintas de este escenario en particular:

a = 1:4; b = [1; zeros(zero_p, 1)]; a = b*a; a = a(1:end-zero_p);


Prueba esto:

zero_p=3; a_new=zeros(1, (zero_p+1)*length(a)-zero_p); a_new(1:(zero_p+1):end)=a;

(No probado, pero debería funcionar).


x = [1 2 3 4 5]; upsample (x, 3)

o / p: 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0

¡¡Aclamaciones!!