Creating index and replacing values
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Inna Pelloso
el 21 de Jun. de 2021
Comentada: Inna Pelloso
el 21 de Jun. de 2021
Hi,
I have A = [0 0 1 0 1 0 0], and B = [ "030121", "030221", "030321"]
I want to create C = [ "030121", "030121", "030221", "030221", "030321", "030321", "030321"], by looking at A, and treating each sucessive sequence beginning with 1 as a new day, and replacing with the corresponding date from B. his is a generalization of a large problem.
Any help would be appreciated!
Inna
2 comentarios
Scott MacKenzie
el 21 de Jun. de 2021
Note that
B = [ '030121', '030221', '030321']
is the same as
B = '030121030221030321'
and that
C = [ '030121', '030121', '030221', '030221', '030321', '030321', '030321']
is the same as
C = '030121030121030221030221030321030321030321'
Did you perhaps intend these to be strings, for example
B = ["030121", "030221", "030321"]
Respuesta aceptada
Steven Lord
el 21 de Jun. de 2021
A = [0 0 1 0 1 0 0];
B = [ "030121", "030221", "030321"];
I'm going to assume that A does not start with 1, or if it does that indicates the first element of the result should be the second element in B.
C = 1 + cumsum(A)
D = B(C)
Alternately if you're doing this to build a datetime array:
D2 = datetime(2021, 3, C)
D2.Format = 'MMddyy'
2 comentarios
Más respuestas (1)
Scott MacKenzie
el 21 de Jun. de 2021
Below is a loop solution. There might be a way to vectorize this -- not sure.
A = [0 0 1 0 1 0 0];
B = [ "030121", "030221", "030321"];
M = [];
k = 1;
for i=1:length(A)
if A(i) == 1 % new day
k = k + 1;
end
M = [M B(k)];
end
Output:
M =
1×7 string array
"030121" "030121" "030221" "030221" "030321" "030321" "030321"
Obviously, the number of 1s in A can't exceed the number of strings in B (minus 1).
Ver también
Categorías
Más información sobre Whos en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!