Creating a string with Permutation

4 次查看(过去 30 天)
Hi,
I have a short question, I am creating a string with a loop but I cannot do the permutation/combination correctly
here is my code
Axes_name = {'sint0.2';'sint0.5';'sint0.7'};
fold_2 = {'BCA';'BPCA';'DLA';'DLCA'};
C_ext = nan*zeros(length(Axes_name),length(fold_2));
for i=1:length(Axes_name)
for j=1:length(fold_2)
leg{sub2ind(size(C_ext),i,j)} = [Axes_name{i} ' ' fold_2{j}];
end
end
I am trying to make combinations like this:
sint0.2 BCA
sint0.2 BPCA
sint0.2 DLA
sint0.2 DLCA
sint0.5 BCA
sint0.5 BCPA
sint0.5 DLA
sint0.5 DLCA
...
and so on, but i am not getting it correctly.Does any know what changes i should do

采纳的回答

Adam Danz
Adam Danz 2022-7-15
编辑:Adam Danz 2022-7-15
I believe this is what you're working toward.
Axes_name = {'sint0.2';'sint0.5';'sint0.7'};
fold_2 = {'BCA';'BPCA';'DLA';'DLCA'};
str = compose('%s %s', string(Axes_name), string(fold_2)')
str = 3×4 cell array
{'sint0.2 BCA'} {'sint0.2 BPCA'} {'sint0.2 DLA'} {'sint0.2 DLCA'} {'sint0.5 BCA'} {'sint0.5 BPCA'} {'sint0.5 DLA'} {'sint0.5 DLCA'} {'sint0.7 BCA'} {'sint0.7 BPCA'} {'sint0.7 DLA'} {'sint0.7 DLCA'}
If you want a column vector,
str(:)
ans = 12×1 cell array
{'sint0.2 BCA' } {'sint0.5 BCA' } {'sint0.7 BCA' } {'sint0.2 BPCA'} {'sint0.5 BPCA'} {'sint0.7 BPCA'} {'sint0.2 DLA' } {'sint0.5 DLA' } {'sint0.7 DLA' } {'sint0.2 DLCA'} {'sint0.5 DLCA'} {'sint0.7 DLCA'}

更多回答(2 个)

Paul
Paul 2022-7-15
Hi hazmah,
Is this what you're looking for?
Axes_name = string({'sint0.2';'sint0.5';'sint0.7'})
Axes_name = 3×1 string array
"sint0.2" "sint0.5" "sint0.7"
fold_2 = string({'BCA';'BPCA';'DLA';'DLCA'})
fold_2 = 4×1 string array
"BCA" "BPCA" "DLA" "DLCA"
result = reshape(Axes_name.' + " " + fold_2,[],1)
result = 12×1 string array
"sint0.2 BCA" "sint0.2 BPCA" "sint0.2 DLA" "sint0.2 DLCA" "sint0.5 BCA" "sint0.5 BPCA" "sint0.5 DLA" "sint0.5 DLCA" "sint0.7 BCA" "sint0.7 BPCA" "sint0.7 DLA" "sint0.7 DLCA"

Voss
Voss 2022-7-15
Axes_name = {'sint0.2';'sint0.5';'sint0.7'};
fold_2 = {'BCA';'BPCA';'DLA';'DLCA'};
You can change the size of C_ext to be length(fold_2)-by-length(Axes_name), since you want to cycle through the fold_2 values first in leg. (Swap j and i where they're used in sub2ind as well.)
C_ext = nan*zeros(length(fold_2),length(Axes_name));
for i=1:length(Axes_name)
for j=1:length(fold_2)
leg{sub2ind(size(C_ext),j,i)} = [Axes_name{i} ' ' fold_2{j}];
end
end
leg = leg.'
leg = 12×1 cell array
{'sint0.2 BCA' } {'sint0.2 BPCA'} {'sint0.2 DLA' } {'sint0.2 DLCA'} {'sint0.5 BCA' } {'sint0.5 BPCA'} {'sint0.5 DLA' } {'sint0.5 DLCA'} {'sint0.7 BCA' } {'sint0.7 BPCA'} {'sint0.7 DLA' } {'sint0.7 DLCA'}
However, you can create matrices of indices i and j using meshgrid or ndgrid, and construct leg at once using strcat:
[i,j] = meshgrid(1:numel(Axes_name),1:numel(fold_2));
leg = reshape(strcat(Axes_name(i),{' '},fold_2(j)),[],1)
leg = 12×1 cell array
{'sint0.2 BCA' } {'sint0.2 BPCA'} {'sint0.2 DLA' } {'sint0.2 DLCA'} {'sint0.5 BCA' } {'sint0.5 BPCA'} {'sint0.5 DLA' } {'sint0.5 DLCA'} {'sint0.7 BCA' } {'sint0.7 BPCA'} {'sint0.7 DLA' } {'sint0.7 DLCA'}

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

产品


版本

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by