when the secret text contain pair(doubke) character like 'dd',mm' ,'ll', the Y vector reswtores as Nan

3 次查看(过去 30 天)
hello all; i have one problem in this code which is , when the secret text contain pair(double) character like 'dd',mm','oo', the Z vector restore as NaN, how i can solve this problem.
str='steganography is the art and science of covered or hidden';
X={'as modeling of changes in backbone conformation still lacks a computationally efficient solution, we developed a discretisation of the conformational states accessible to the protein backbone similar to the successful rotamer approach in side chains. The BriX fragment database, consisting of fragments from 4 to 14 residues long, was realized through identification of recurrent backbone fragments from a non-redundant set of high-resolution protein structures. brix contains an alphabet of more than 1,000 frequently observed conformations per peptide length for 6 different variation levels. analysis of the performance of brix revealed an average structural coverage of protein structures of more than 99 percent within a root mean square distance of 1 angstrom. globally, we are able to reconstruct protein structures with an average accuracy of 0.48 angstrom rmsd. as expected, regular structures are well covered, but, interestingly, many loop regions that appear irregular at first glance are also found to form a recurrent structural motif, albeit with lower frequency of occurrence than regular secondary structures. larger loop regions could be completely reconstructed from smaller recurrent elements, between 4 and 8 residues long. finally, we observed that a significant amount of short sequences tend to display strong structural ambiguity between alpha helix and extended conformations. when the sequence length increases, this so-called sequence plasticity is no longer observed, illustrating the context dependency of polypeptide structures.'};
for m = 1:numel(X)
Y = bsxfun(@eq,X{m}(:),str);
for n = 2:size(Y,2)
Y(:,n) = Y(:,n) & cumsum(Y(:,n-1))>0;
end
Z = find(any(diff([false(size(str));cumsum(Y)>0],1),2))
end

采纳的回答

Stephen23
Stephen23 2015-5-25
编辑:Stephen23 2015-5-27
I think you just need to preallocate the cell array, and then index into it inside the loop:
str = 'steganography is the art and science of covered or hidden';
X = {'as modeling of changes in backbone conformation still lacks a computationally efficient solution, we developed a discretisation of the conformational states accessible to the protein backbone similar to the successful rotamer approach in side chains. The BriX fragment database, consisting of fragments from 4 to 14 residues long, was realized through identification of recurrent backbone fragments from a non-redundant set of high-resolution protein structures. brix contains an alphabet of more than 1,000 frequently observed conformations per peptide length for 6 different variation levels. analysis of the performance of brix revealed an average structural coverage of protein structures of more than 99 percent within a root mean square distance of 1 angstrom. globally, we are able to reconstruct protein structures with an average accuracy of 0.48 angstrom rmsd. as expected, regular structures are well covered, but, interestingly, many loop regions that appear irregular at first glance are also found to form a recurrent structural motif, albeit with lower frequency of occurrence than regular secondary structures. larger loop regions could be completely reconstructed from smaller recurrent elements, between 4 and 8 residues long. finally, we observed that a significant amount of short sequences tend to display strong structural ambiguity between alpha helix and extended conformations. when the sequence length increases, this so-called sequence plasticity is no longer observed, illustrating the context dependency of polypeptide structures.'};
Z = cell(size(X));
for m = 1:numel(X)
Y = bsxfun(@eq,X{m}(:),str);
for n = 2:size(Y,2)
Y(:,n) = Y(:,n) & cumsum(Y(:,n-1))>0;
end
Z{m} = find(any(diff([false(size(str));cumsum(Y)>0],1),2));
end
EDIT: improved code that takes into account repeated characters (see the comments):
m = 1;
str = 'communication';
X = {'computers memory unites collection demarcation'};
Y = bsxfun(@eq,X{m}(:),str);
for n = 2:size(Y,2)
Y(:,n) = Y(:,n) & [false;cumsum(Y(1:end-1,n-1))>0];
end
find(any(Y & cumsum(Y)<2, 2))
  6 个评论
Stephen23
Stephen23 2015-5-27
编辑:Stephen23 2015-5-27
You are right, there was a bug in my original concept in that it did not take into account repeated characters. This version is more robust, and gives the output that you need:
m = 1;
str = 'communication';
X = {'computers memory unites collection demarcation'};
Y = bsxfun(@eq,X{m}(:),str);
for n = 2:size(Y,2)
Y(:,n) = Y(:,n) & [false;cumsum(Y(1:end-1,n-1))>0];
end
find(any(Y & cumsum(Y)<2, 2))
And it displays this in the command window:
ans =
1
2
3
11
18
19
20
25
39
43
44
45
46

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Call C++ from MATLAB 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by