strcat('Scale Factor = ',num2str(table2array(T(min(find(find_groups==k)),'scalefactor'))))
and the output is like:
'Scale Factor =0.65'
I need to add the space between = and 0.65. Using above code does not add the space. Any idea/solution?

1 件のコメント

Guillaume
Guillaume 2020 年 1 月 29 日
Please note in Walter's answer how he simplified the horror that is:
table2array(T(min(find(find_groups==k)),'scalefactor')))
to
T.scalefactor(find(find_groups==k,1)))
Use proper table indexing,
table2array(Atable(rows, 'variablename')) %() indexing on a table returns a table
is simply
Atable.variablename(rows) %. indexing returns the content of the table
%or
Atable{rows, 'variablename'} % {} indexing returns the content of the table
and
min(find(something))
is simply
find(something, 1) %get the first element only

サインインしてコメントする。

 採用された回答

Image Analyst
Image Analyst 2020 年 1 月 29 日

1 投票

Try fprintf()
theNumber = table2array(T(min(find(find_groups==k)),'scalefactor')); % Whatever...but don't use num2str()
fprintf('Scale Factor = %.2f.\n', theNumber);

6 件のコメント

Zeynab Mousavikhamene
Zeynab Mousavikhamene 2020 年 1 月 29 日
Thanks but I dont want to print it. I want to use it as plot x axis title.
Image Analyst
Image Analyst 2020 年 1 月 29 日
theNumber = table2array(T(min(find(find_groups==k)),'scalefactor')); % Whatever...but don't use num2str()
xLabelString = sprintf('Scale Factor = %.2f.\n', theNumber);
xlabel(xLabelString, 'FontSize', 20);
Allen
Allen 2020 年 1 月 29 日
Though sprintf is a much better approach, you can also use [] or horzcat to concatenate pretty much any like class of variables; in this case character vectors.
xLabelString = ['Scale Factor = ',num2str(table2array(T(min(find(find_groups==k)),'scalefactor')))];
Zeynab Mousavikhamene
Zeynab Mousavikhamene 2020 年 1 月 29 日
Thank you. And if it was string array, how could I add no limitation to the resulting string? for example
xLabelString = sprintf('Name = %.2s', theName);
this line says report the string until two characters. so if the name is "Hello" it would report "He". How can I say to report the whole "Hello" not part of it?
Ps. Hello is an example and the length of name might change in each iteration so I need a general method.
Guillaume
Guillaume 2020 年 1 月 29 日
If you don't put any restriction on the format length, then matlab won't truncate the input. So
sprintf('Name = %s', theName) %no limit to 2 characters
would work.
If you want a minimum field width of 2 characters but more if required, then
sprintf('Name = %2s', theName) %No . in the format string. Minimum field width of 2, padding with spaces if required
Zeynab Mousavikhamene
Zeynab Mousavikhamene 2020 年 1 月 29 日
Thank you @Image Analyst and @Allen and @Guillaume. If you post separately I can vote for your posts.

サインインしてコメントする。

その他の回答 (2 件)

Walter Roberson
Walter Roberson 2020 年 1 月 29 日

1 投票

For character array inputs, strcat removes trailing ASCII white-space characters: space, tab, vertical tab, newline, carriage return, and form feed. For cell and string array inputs, strcat does not remove trailing white space.

2 件のコメント

Zeynab Mousavikhamene
Zeynab Mousavikhamene 2020 年 1 月 29 日
so what would you suggest to do?
Walter Roberson
Walter Roberson 2020 年 1 月 29 日
strcat({'Scale Factor = '}, num2str(T.scalefactor(find(find_groups==k,1))))

サインインしてコメントする。

Steven Lord
Steven Lord 2020 年 1 月 29 日

1 投票

If you're using a release that supports string arrays, you can simplify this a bit if you trust MATLAB to do "something reasonable" when combining your text and numeric data.
x = 0.65;
S = "Name = " + x

カテゴリ

ヘルプ センター および File ExchangeCharacters and Strings についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by