Creating index and replacing values
4 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Scott MacKenzie
2021 年 6 月 21 日
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"]
採用された回答
Steven Lord
2021 年 6 月 21 日
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 件のコメント
その他の回答 (1 件)
Scott MacKenzie
2021 年 6 月 21 日
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).
参考
カテゴリ
Help Center および File Exchange で Whos についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!