简体   繁体   中英

Matlab “for loop” to create a matrix

I have a fairly large vector named blender . I have extracted n elements for which blender is greater than x (irrelevant). Now my difficulty is the following:

I am trying to create a ( 21 xn ) matrix with each element of blender plus 10 things before, and the 10 things after.

element=find(blender >= 120);

I have been trying variations of the following:

for i=element(1:end)
    Matrix(i)= Matrix(blender(i-10:i+10));
end

then I want to plot one column of the matrix at the time when I hit Enter. This second part I can figure out later, but I would appreciate some help making the Matrix

Thanks

First, you can use "logical indexing" of your array, which uses a logical expression do address your vector. With blender = [2, 302, 35, 199, 781, 312, 8] , it could look like this:

>> b_hi = blender(blender>=120)
b_hi =
       302  199  781  312

Second, you can concatenate arrays like in b_padded = [1, 2, b_hi, 3, 4] . If b_hi was a column vector, you'd use semicolons instead of commas.

Third, there is a function reshape that allows you to turn the resulting vector into a matrix. doc reshape will tell you details. For example, to turn b_padded into a 2-by-4 matrix,

>> b_matrix = reshape(b_padded, 4, 2)
b_matrix =
           1   302   781     3
           2   199   312     4

will do. This means you can do all of the job without any for-loop. Note that transposing the result of reshape(b_padded, 2, 4) will give you the other possible 2-by-4 matrix. You obtain the transpose of a matrix A by A' . You will find out which one you want.

You need to create a new matrix, and use two indices so that Matlab knows it is assigning to a column in a 2D matrix.

NewMatrix = zeros(21, length(element));
for i = 1:length(element)
    k = element(i);
    NewMatrix(:,i)= Matrix(blender(k-10:k+10));
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM