How to insert an unknown number of coloumn in a Matrix?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Giuseppe Sarda
le 17 Mai 2019
Commenté : Guillaume
le 17 Mai 2019
Hi everybody,
I'd like to add a number of coloumns specified in a variable to a matrix in certain positions.
The coloumns will be represented by arrays of just one value, the positions should divide equally (when possible) the matrix.
I'll make an exemple:
>> A=reshape(1:16,4,4)
A =
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
>> B(1,1:4)=-1;
>>B=B';
After modification I'll have:
For 3 coloumns to be inserted
NumCol=3;
A=
1 -1 5 -1 9 -1 13
2 -1 6 -1 10 -1 14
3 -1 7 -1 11 -1 15
4 -1 8 -1 12 -1 16
For just one
NumCol=1;
A=
1 5 -1 9 13
2 6 -1 10 14
3 7 -1 11 15
4 8 -1 12 16
I can find my self the way to understand where to insert coloumns. My problem is how??
Can somebody help me please?
0 commentaires
Réponse acceptée
madhan ravi
le 17 Mai 2019
Try this:
B=rand(3); % your initial matrix
[m,n]=size(B);
No_of_Columns=input('No of columns to be inserted')
disp('No of columns and NUMEL(where) should be equal')
where=input('inserting position_s')
Wanted=zeros(m,n+ncs)
A_constant=input('A scalar Value to be assigned')
Wanted(:,where)=A_constant
Wanted(:,setdiff(1:size(Wanted,2),where))=B
Plus de réponses (1)
Guillaume
le 17 Mai 2019
It's hard to tell you a generic way without understanding how the insertion points are chosen.
In your first case, I would do:
newA = repmat(B, 1, size(A, 1) + NumCol); %fill with B
newA(:, 1:3:end) = A %copy A in odd columns
In your second case, I would do:
newA = [A(:, 1:2), B, A(:, 3:end)]
2 commentaires
Guillaume
le 17 Mai 2019
This is how I'd do it then:
%A: a matrix of any size
%B: a column vector (or matrix) of the same height as A, to be inserted at regular interval in A
%NumCol: the number of times B must be inserted
splitdist = round(linspace(0, size(A, 2), NumCol + 2)); %find how to split A
newA = cell(1, 2*numel(splitdist) - 3);
newA(1:2:end) = mat2cell(A, size(A, 1), diff(splitdist)); %split and distribute A
newA(2:2:end) = {B}; %distribute B
newA = cell2mat(newA)
Voir également
Catégories
En savoir plus sur Spline Postprocessing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!