How to make a matrix with mixed string and number elements ?

20 visualizzazioni (ultimi 30 giorni)
Hi ,
I want to make a Matrix with i rows and 4 colomns. I want to fill it with <X000i> with i a number changing from 1 to N . If the matrix name is A , I want the elemnts to be in the next order :
for i = 1 : N ( if N =10 )
A(1 , 1 ) = <X0001>
A(1 , 2 ) = <X0002>
A(1 , 3 ) = <X0003>
A(1 , 4 ) = <X0004>
A(2 , 1 ) = <X0005>
A(2 , 2 ) = <X0006>
A(2 , 3 ) = <X0007>
A(2 , 4 ) = <X0008>
.............
.............
A(10 , 1 ) = <X0037>
A(10 , 2 ) = <X0038>
A(10 , 3 ) = <X0039>
A(10 , 4 ) = <X0040>
There shoud be only 4 digits after the X .
The hard part is that I don't knwo th code to have eac elemnt of the matrix a micture of number and string.
I woud really appriciate if someone could help me solve my problem .
Thank you .

Risposta accettata

Adam Danz
Adam Danz il 13 Lug 2022
Modificato: Adam Danz il 13 Lug 2022
I think this is your goal
N = 10;
M = 4;
str = compose("x%04d",1:N*M);
A = reshape(str,M,N)'
A = 10×4 string array
"x0001" "x0002" "x0003" "x0004" "x0005" "x0006" "x0007" "x0008" "x0009" "x0010" "x0011" "x0012" "x0013" "x0014" "x0015" "x0016" "x0017" "x0018" "x0019" "x0020" "x0021" "x0022" "x0023" "x0024" "x0025" "x0026" "x0027" "x0028" "x0029" "x0030" "x0031" "x0032" "x0033" "x0034" "x0035" "x0036" "x0037" "x0038" "x0039" "x0040"
Note that this is referred to as a string array rather than a matrix. You could also create a cell array of character vectors:
str = compose('x%04d',1:N*M);
A = reshape(str,M,N)'
A = 10×4 cell array
{'x0001'} {'x0002'} {'x0003'} {'x0004'} {'x0005'} {'x0006'} {'x0007'} {'x0008'} {'x0009'} {'x0010'} {'x0011'} {'x0012'} {'x0013'} {'x0014'} {'x0015'} {'x0016'} {'x0017'} {'x0018'} {'x0019'} {'x0020'} {'x0021'} {'x0022'} {'x0023'} {'x0024'} {'x0025'} {'x0026'} {'x0027'} {'x0028'} {'x0029'} {'x0030'} {'x0031'} {'x0032'} {'x0033'} {'x0034'} {'x0035'} {'x0036'} {'x0037'} {'x0038'} {'x0039'} {'x0040'}

Più risposte (1)

Jon
Jon il 13 Lug 2022
Here's another approach, not so nicely vectorized as @Adam Danz, in which I store the values in a cell array
I hadn't known about the compose function when I wrote up the attached answer. Thanks @Adam Danz for teaching me about the compose function with your answer.
numRows = 10;
numColumns = 4;
% cacluate total number of elements
N = numRows*numColumns;
% generate cell array with elements of form <X000i>
A = cell(numRows,numColumns); % preallocate cell array to hold values
for i = 1:numRows
for j = 1:numColumns
k = sub2ind([numRows,numColumns],i,j);% get linear index
A{i,j} = num2str(k,'<%04d>'); % e.g. '<0035>'
end
end
disp(A)
{'<0001>'} {'<0011>'} {'<0021>'} {'<0031>'} {'<0002>'} {'<0012>'} {'<0022>'} {'<0032>'} {'<0003>'} {'<0013>'} {'<0023>'} {'<0033>'} {'<0004>'} {'<0014>'} {'<0024>'} {'<0034>'} {'<0005>'} {'<0015>'} {'<0025>'} {'<0035>'} {'<0006>'} {'<0016>'} {'<0026>'} {'<0036>'} {'<0007>'} {'<0017>'} {'<0027>'} {'<0037>'} {'<0008>'} {'<0018>'} {'<0028>'} {'<0038>'} {'<0009>'} {'<0019>'} {'<0029>'} {'<0039>'} {'<0010>'} {'<0020>'} {'<0030>'} {'<0040>'}
  1 Commento
Jon
Jon il 13 Lug 2022
I guess I forgot that you also wanted the X in your strings, to get this use
A{i,j} = num2str(k,'<X%04d>')
You can also use this in @Adam Danz approach, using the compose function which is nicer because it doesn't need any loops.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by