# Can I assign vectors with different number of rows per-column to a matrix?

3 visualizzazioni (ultimi 30 giorni)
Abdallah Magour il 13 Gen 2024
Commentato: Star Strider il 14 Gen 2024
I have an optimization function that outputs a vector. I included this optimization function in a for loop so it runs for length(T) times resulting in length(T) number of vectors. The problem is that the vectors have different number of rows and I want to store them in sometihng like a matrix or table for ex so I can use the values later for other operations later. However this is not possible since for a matrix the number of rows in all columns need to be the same. I added comments next to the lines for clarification
Example
1- N=[8 8 8 7 5 6 9 8 6 4 7 6 8 6 4 7 9] %%%Length(T)=length(N) This is okay
2- P=zeros(2*max(N),length(T))?????? How can I prelocate P from line 8.
3- for iii=1:length(T) %THis line is okay
4- E1=transpose(cost1ext( :,iii )); %%THis line is okay
5- E2=transpose(cost2ext(:,iii )); %THis line is okay
6- tand_measuree=transpose(cost3ext(:,iii)); %This line is okay
7- save('there',"tand_measuree","E2","E1") %THis line is okay
8- P(:,iii)=CURVE_FITopti(N(iii),Startg,Starttau,ubgi,ubtaui,Dec_E)
9- end
every run the vector P resulting from the execution of line 8 will be a vector with 2*N(iii) rows. I was trying to prelocated P as a matrix P=zeros(2*max(N),length(T)) so that after the loop is finished I will have a matrix with some zeros left for the shorter vectors, but it did not work.
<stopping criteria details>
Unable to perform assignment because the size of the left side is 18-by-1 and the size of the right side is 16-by-1.
Error in untitled6 (line 90)
P(:,iii)=CURVE_FITopti(N(iii),Startg,Starttau,ubgi,ubtaui,Dec_E)
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Star Strider il 13 Gen 2024
I would use a cell array. It is not as convenient to use as a numeric matrix, however it tolerates different length vectors.
##### 4 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
Abdallah Magour il 14 Gen 2024
Modificato: Abdallah Magour il 14 Gen 2024
Hi thanks Star, yes it works well.
Star Strider il 14 Gen 2024
As always, my pleasure!

Accedi per commentare.

### Più risposte (1)

David Goodmanson il 14 Gen 2024
Hi Abdallah,
Cell arrays are very versatile but they are also on the slow side. Depending on what you are doing, that may not matter at all (in which case it's a good opportunity to gain some familiarity with cells), or it might. Another way to do this is, if you know the length of the longest vector or you have a reasonable estimate of the maximum possible length, you can pad the end of each vector with a value that you know is not any element of the vectors themselves, such as NaN for example. Here is an example.
m = nan(6,10); % 10 is a known bound for the max length
% create and store vectors
m(1,1:5)= randi(9,1,5);
m(2,1:8)= randi(9,1,8)
m(3,1:4)= randi(9,1,4)
m(4,1:6)= randi(9,1,6)
m(5,1:7)= randi(9,1,7)
m(6,1)= 17;
m
m =
4 5 4 1 3 NaN NaN NaN NaN NaN
2 2 3 4 1 9 9 5 NaN NaN
5 4 9 4 NaN NaN NaN NaN NaN NaN
2 8 4 3 4 1 NaN NaN NaN NaN
2 9 9 6 1 3 4 NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN
It's useful to know the length of each vector without explictily having to look at m, so
veclength = sum(~isnan(m),2)
veclength =
5
8
4
6
7
1
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Abdallah Magour il 14 Gen 2024
Hi David, thanks for your reply. I treid to use the nan matrix but it unfortunatley did not not work. However, it is still usefull info for other applications.

Accedi per commentare.

### Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

R2023a

### Community Treasure Hunt

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

Start Hunting!

Translated by