45
blinkdagger an Engineering and MATLAB blog Home Listchecker MATLAB Contact About Matlab - Tips and Tricks on Manipulating 1-D Arrays (Vectors) 14 Jan 2008 Quan Quach 175 comments 24,044 views Introduction 1-D Arrays (also known as vectors) are commonly used within Matlab, so it is a good idea to understand how they work and how to bend them to your will. This is a quick tutorial on some simple tricks that you may or may not know about vectors. Creating Vectors How to create a row vector that increments by 1. For example, let’s create a row vector that goes from 1 to 10, with increments of 1. myVector = [1 2 3 4 5 6 7 8 9 10]; %the hard way myVector = 1:10 %the easy way 1. How to transform a row vector to a column vector, and vice versa. myVector = 1:10; %creates a row vector myVector = myVector' %this is the complex conjugate transpose myVector = myVector.' %is the non-conjugate transpose 2. Note: Dan Kominsky pointed out that is a subtle but important difference here. When you are working with real numbers the difference is irrelevant, but when you are dealing with complex numbers, the meaning is entirely different! Thanks for the correction, Dan. How to create a column vector that increments by 1. For example, let’s create a column vector that goes from 1 to 10, with increments of 1. myVector = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]; %the hard way myVector = [1:10].' %the easy way 3. How to create a vector that increments by a specific value. Let’s create a vector that goes from 1 to 19, and increments by 2. Note that the increment value is not limited to integers. myVector = 1:2:19 4. How to create a vector that decrements by a specific value. Let’s create a vector that goes from 10 to 1, and decrements by 1 myVector = 10:-1:1 5. How to create a vector with equally spaced points. Let’s create a vector that goes from 0 to 100 with 21 equally spaced points. %first argument is the start value of the vector 6. Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d... 1 of 45 3/25/2011 1:43 AM

Matlab - Array Manipulation and Tricks _ Blink Dagger

Embed Size (px)

Citation preview

blinkdagger

an Engineering and MATLAB blog

Home

Listchecker

MATLAB

Contact

About

Matlab - Tips and Tricks on Manipulating 1-D Arrays (Vectors)

14 Jan 2008 Quan Quach 175 comments 24,044 views

Introduction

1-D Arrays (also known as vectors) are commonly used within Matlab, so it is a good idea to understand how

they work and how to bend them to your will. This is a quick tutorial on some simple tricks that you may or may

not know about vectors.

Creating Vectors

How to create a row vector that increments by 1. For example, let’s create a row vector that goes from 1 to 10, with

increments of 1.

myVector = [1 2 3 4 5 6 7 8 9 10]; %the hard waymyVector = 1:10 %the easy way

1.

How to transform a row vector to a column vector, and vice versa.

myVector = 1:10; %creates a row vector myVector = myVector' %this is the complex conjugate transposemyVector = myVector.' %is the non-conjugate transpose

2.

Note: Dan Kominsky pointed out that is a subtle but important difference here. When you are working with real

numbers the difference is irrelevant, but when you are dealing with complex numbers, the meaning is entirely

different! Thanks for the correction, Dan.

How to create a column vector that increments by 1. For example, let’s create a column vector that goes from 1 to 10,

with increments of 1.

myVector = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]; %the hard way myVector = [1:10].' %the easy way

3.

How to create a vector that increments by a specific value. Let’s create a vector that goes from 1 to 19, and

increments by 2. Note that the increment value is not limited to integers.

myVector = 1:2:19

4.

How to create a vector that decrements by a specific value. Let’s create a vector that goes from 10 to 1, and

decrements by 1

myVector = 10:-1:1

5.

How to create a vector with equally spaced points. Let’s create a vector that goes from 0 to 100 with 21 equally

spaced points.

%first argument is the start value of the vector

6.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

1 of 45 3/25/2011 1:43 AM

%second argument is the end value of the vector%third argument is the number of points within the vectormyVector = linspace(0,100,21)

How to create a vector of zeros. For example, let’s create a vector of 10 zeros.

%first argument is the number of rows%second argument is the number of columnsrowZeros = zeros(1,10)

Note: Incidentally, this is a great way to preallocate a vector. Preallocating a vector is most useful when FOR loops are

involved. Preallocating a vector is preferred over resizing a vector repeatedly as it reduces the processing time.

7.

How to create a vector of ones. For example, let’s create a vector of 10 ones.

%first argument is the number of rows%second argument is the number of columnsrowOnes = ones(1,10)

Note: This is yet another way to preallocate a vector.

8.

Adding, Removing, and Replacing Elements within a Vector

How to append a vector. For example, lets add 11 to the end of the vector

myVector = 1:10;myVector = [myVector 11] %we can also add 11 to the beginning of the vectormyVector = [11 myVector];

Note: This method of appending vectors should not be used within large FOR loops. When resizing arrays, memory

must be reallocated with a larger size. If this is done repeatedly, there is a speed penalty.

9.

How to append two vectors together.

myVector1 = 1:5;myVector2 = 6:10;myVectorAppend = [myVector1 myVector2]%myVectorAppend = cat(2,myVector1,myVector2) does the same thing

Note: Same warning as above.

10.

How to remove a particular element from a vector. Lets say we want to remove the 4th entry.

myVector = 1:10;myVector(4) = []

11.

How to replace a particular element with a different element within a vector. Lets say we want to replace the 4th entry

with the value of 100.

myVector = 1:10;myVector(4) = 100

12.

How to remove the last element from a vector.

myVector = 1:10;myVector(end) = []

13.

How to remove the last 5 elements.

myVector = 1:10;myVector(end-4:end) = []

14.

How to keep the last 5 elements (or equivalently, remove the first five elements).15.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

2 of 45 3/25/2011 1:43 AM

myVector = 1:10;myVector = myVector(end-4:end) %the following command does the same thingmyVector(1:5) =[];

How to remove a series of elements. For example, let’s remove entries 3 through 6:

myVector = 1:10;myVector(3:6) = []

16.

How to keep a series of elements. For example, let’s keep entries 3 through 6:

myVector = 1:10;myVector = myVector(3:6)

17.

How to remove a group of specific elements. For example, lets remove entries 2,5, and 7:

myVector = 1:10;myVector([2,5,7]) = []

18.

How to keep a group of specific elements. For example, lets keep entries 2,5, and 7:

myVector = 1:10;myVector = myVector([2,5,7])

19.

How to get the number of elements within a vector. Useful when creating a for loop to run through a vector.

myVector = 1:10;numElements = length(myVector) %the following command does the same thingnumElements = numel(myVector)

20.

How to remove all zeros from a vector.

myVector = [0 0 0 1 2 3 0 0 4 5 1 2 0 0]; %index contains the indices elements within myVector which are non-zeroindex = find(myVector);myVector = myVector(index) %removes all the zeros within the vector

Alternatively, logical indexing can be used (and is more efficient)

myVector(myVector == 0) = [];

21.

How to remove a particular value from a vector. For example, how to remove any occurence of 6 within a vector

myVector = [6 6 0 1 2 3 0 0 6 6 1 2 0 0]; %index contains the indices of elements within myVector which are equal to 6index = find(myVector == 6 );myVector(index) = []

Alternatively, logical indexing can be used (and is more efficient)

myVector(myVector == 6) = [];

22.

How to remove the first two occurences of 6 within a vector

myVector = [6 6 0 1 2 3 0 0 6 6 1 2 0 0];index = find(myVector == 6,2);myVector(index) = []

23.

How to remove all elements greater than 5 from a vector.

myVector = [10 0 0 1 12 3 0 0 4 5 1 12 0 0]; %index contains indices of elements within myVector which are greater than 5

24.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

3 of 45 3/25/2011 1:43 AM

index = find(myVector > 5);myVector(index) = []

Alternatively, logical indexing can be used (and is more efficient)

myVector(myVector > 5) = [];

Similarly, how to remove all elements less than 5 from a vector.

myVector = [10 0 0 1 12 3 0 0 4 5 1 12 0 0]; %index contains the indices of elements within myVector which are less than 5index = find(myVector < 5);myVector(index) = []

Alternatively, logical indexing can be used (and is more efficient)

myVector(myVector < 5) = [];

25.

Sorting and Shifting Vectors

How to reverse a vector.

myVector = 1:10;myVector = myVector(end:-1:1)

26.

How to sort a vector.

myVector = [10 0 0 1 12 3 0 0 4 5 1 12 0 0];myVectorAscend = sort(myVector) %sort ascendingmyVectorDescend = sort(myVector,'descend') %sort descending

27.

How to shift the elements one spot to the right.

myVector = 1:10;myVector = myVector([end 1:end-1])

28.

How to shift the elements one spot to the left.

myVector = 1:10;myVector2 = myVector([2:end 1])

29.

Other useful commands:

How to get the maximum and minimum value of a vector

myVector = [10 0 0 1 12 3 0 0 4 5 1 12 0 0];maxValue = max(myVector); minValue = min(myVector);

30.

How to add up all the elements within a vector.

myVector = 1:10;total = sum(myVector);

31.

How to get the product of all the elements within a vector.

myVector = 1:10;total = prod(myVector);

32.

How to get the average, standard deviation, and variance of a vector.

myVector = 1:10;averageArray = mean(myVector)stdArray = std(myVector)varArray = var(myVector)

33.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

4 of 45 3/25/2011 1:43 AM

Got any tricks up your sleeve?

There are a ton of Matlab tricks that were not covered in this tutorial. Do you know of any super useful trick? If you have

any of your own tips and tricks up your sleeve, please share at least one!

175 Responses to “Matlab - Tips and Tricks on Manipulating 1-D Arrays (Vectors)”

on 14 Jan 2008 at 7:46 am 1Dan K

I’m sorry to tell you that you made one of the classic blunders of matlab programming. The transpose of a vector is

NOT myVector’ ! It is myVector.’ When you are working with real numbers the difference is irrelevant, but the

myVector’ is the complex conjugate of the transpose! And believe me it is a royal pain to debug that mistake, since it is

a coding error that is very hard to see. Hope this helps.

Dan

1.

on 14 Jan 2008 at 2:14 pm 2Quan Quach

Dan K:

Thanks for the correction. It is a subtle, but important point!! I have edited the post to reflect your comment.

Thanks,

Quan

2.

on 15 Jan 2008 at 7:31 am 3Dan K

Actually, Quan, there is one other major area in which your code is inefficient (although functionally correct). It is

generally significantly faster to use logical indexing rather than the find command. For example in item number 24 you

use:

index = find(myVector > 5);

myVector(index) = []

Whereas a faster implementaiton (and, I think more clear) is:

myVector(myVector >5)=[];

HTH,

Dan

3.

on 15 Jan 2008 at 7:56 pm 4Quan Quach

Thanks Again Dan. Your suggestion is duly noted and I have edited the post to reflect it.

4.

on 21 Jan 2008 at 2:40 pm 5Vahid

I need to muliple a vector to every single column (as the same size of the vector) of a matrix element by element

without using the for loop. Is there any way to do it?

5.

on 21 Jan 2008 at 3:23 pm 6Quan Quach

Try using the repmat command. For example:

myVector = [1;2;3;4] %the vector you will be multiplying with myMatrix = magic(4); % the matrix you are multiplying into. myVectorRepeated = repmat(myVector,1,4);

6.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

5 of 45 3/25/2011 1:43 AM

myAnswer = myMatrix .* myVectorRepeated; %notice the dot before the multipy

on 16 Feb 2008 at 9:52 am 7Dave

I visited your website and i found it very useful. Dan comments were even better. Great work!

7.

on 09 Mar 2008 at 2:43 pm 8Percy

I’ve got a question about removind some indices from a cell, e.g.

a=cell(10,10);

indicesToRemove = [3,5,8];

I want to remove both the 3th,5th and 8th columns AND rows.

such that the dimension of a is [7,7]

it doesn’t work to put these to a{ind,:}={}; a{:,ind}={}; or does it?

8.

on 09 Mar 2008 at 3:05 pm 9Quan Quach

Percy,

Try this:

a(:,indicesToRemove) = [];a(indicesToRemove,:) = [];

9.

on 12 Mar 2008 at 3:06 am 10anuj

My question is -

How can I remove rows in a matrix that have third element in the column 0

Input-

1 2 3

2 3 0

0 2 3

0 2 0

Answer should be-

1 2 3

0 2 3

10.

on 26 Mar 2008 at 12:19 am 11jack

if I have two vectors that have different length,eg.

vector1 a=[1 2; 0 1; 2 1] and vector2 b=[ 1 2; 2 1]

and I want of delete the elements from vector1 a that have the same values with vector2 b?

without using loop, how to make a program?

11.

on 26 Mar 2008 at 12:21 am 12jack

assuming that I just have the vectors of a and b, but doesn’t know the index of b in a.

12.

on 26 Mar 2008 at 12:45 am 13Daniel Sutoyo

hey jack you can use the command

setdiff(a,b,’rows’)

13.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

6 of 45 3/25/2011 1:43 AM

on 27 Mar 2008 at 9:49 pm 14takkari

Hi. I am coverting R code into Matlab and have no idea how to do the following:

>y z order(y)

[1] 1 3 8 2 5 4 6 7

> p p

[1] 0.80 3.00 0.30 0.00 0.20 1.30 9.10 0.09

How can I implement this code in matlab as there is no order() function?

14.

on 27 Mar 2008 at 11:25 pm 15Quan Quach

Takkari,

Maybe the sort function is what you are looking for.

Quan

15.

on 28 Mar 2008 at 11:32 am 16takkari

Hi Quan,

sort(y) just sort the data.

What I need is a vector containing indices of the sorted values in original vector y.

16.

on 28 Mar 2008 at 2:19 pm 17Daniel Sutoyo

Takkari,

You could have said that in the first place, Instead of showing us the R code.

[y,i] = sort(y)

y is your new sorted values

i will be you indices

17.

on 28 Mar 2008 at 2:19 pm 18takkari

This code do the same job but takes much time:

x=sort(y);

p=[];

for i=1:length(x)

p=[p find(y==x(i))];

end

length of x is 392480

18.

on 28 Mar 2008 at 3:04 pm 19takkari

Thanks Daniel. Problem solved.

19.

on 31 Mar 2008 at 1:51 pm 20takkari

Hi Dear,

The following code is taking much time any idea how to make it run faster?

omegac,alphac,betac are scalars. h,Y,b,bb are vecotrs of of length n.

for t=3:n

h(t)=omegac+alphac*Y(t-1)+betac*h(t-1);

b(t)=Y(t-1);

20.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

7 of 45 3/25/2011 1:43 AM

bb(t)=(omegac/(1-betac)^2);

for j=2:(t-1)

b(t)=b(t)+((betac) (̂j-1))*Y(t-j);

bb(t)=bb(t)+alphac*(j-1)*((betac)^(j-2))*Y(t-j);

end

end

Thanks

on 31 Mar 2008 at 3:33 pm 21Quan Quach

Takkari,

Here’s something to get you started.

Quan

h(3:n) = omegac + alphac*Y(2:n-1) + betac*h(2:n-1);b(3:n) = Y(2:n);bb(3:n)=(omegac/(1-betac)^2); for t=3:nfor j=2:(t-1)b(t)=b(t)+((betac)^(j-1))*Y(t-j);bb(t)=bb(t)+alphac*(j-1)*((betac)^(j-2))*Y(t-j);endend

21.

on 28 May 2008 at 12:50 pm 22Jon V

Hey! I just wanted to say that your MATLAB tutorials are great, I found them extremely helpful. Everyone else’s

comments were helpful as well. You have a great website!

Thanks

22.

on 06 Jun 2008 at 11:34 am 23sathya

n=1:10;

average=mean(n)

??? Error: File: mean.m Line: 2 Column: 1

Function definitions are not permitted at the prompt or in scripts.

I got this error.How can i get mean?

23.

on 06 Jun 2008 at 11:49 am 24sathya

How about these?

n(isprime(n))=0 returns 0 for all the primevalues of n

n(rem(n,2)==0)=0 returns 0 for all the even values of n

n(rem(n,2)~=0)=0 returns 0 for all the odd values of n

24.

on 08 Jun 2008 at 3:36 pm 25Travis Johnson

I recently found the unique(V) function very useful in a permutations algorithm which generated the correct answer

several ways and stored them all. To prune it down, I used unique.

>> v=[0 0 1 1 2 2];

>> unique(v)

ans =

0 1 2

25.

on 25 Jun 2008 at 8:03 am 26Ashley26.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

8 of 45 3/25/2011 1:43 AM

I have a matrix and I want to remove all columns that are zeros. Does anyone know how to do that?

Thanks!

on 14 Jul 2008 at 5:19 pm 27Mina

Hey All,

Thanks for the useful article.

I need to access a 2-D array as a LUT.

example

LUT = [11 12 13 14; 21 22 23 24; 31 32 33 34];

rowIndex = [3 2]; columnIndex = [4 1]; % size of rowIndex equal size columnIndex

Can I get a vector of (3,4) & (2, 1) in a single command.

result = [34 21];

27.

on 14 Jul 2008 at 5:29 pm 28Mina

I got it

We can use

result = LUT(sub2ind(size(LUT), rowIndex , columnIndex ));

28.

on 24 Jul 2008 at 5:48 am 29tanuj

Hey thanks for nice tips.

I have a 2-D matrix

A = [1 2 3;4 5 6]; (A can be any arbitary matrix)

i want to sum all the elements above the value 2. How can i do that ?

i mean i want 3+4+5+6=18(answer)

Thanks a lot

29.

on 24 Jul 2008 at 6:10 am 30tanuj

hey i guess i got the answer

A = [1 2 3; 4 5 6];

% if i want to add all the values greater than 3, then

a(a<3)=0;

t=cumsum(cumsum(a),2);

t(end)

can this be reduced….

30.

on 24 Jul 2008 at 9:17 am 31tanuj

but the problem is that my ‘A’ is of type uint16/uint32.

and ‘cumsum’ is not valid for these types.

what do i do, plz susggest

thanks in advance

31.

on 12 Aug 2008 at 4:30 am 32madhu

Hello Dr Quan Quach ,

32.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

9 of 45 3/25/2011 1:43 AM

I need a help on polynomial fit

if i have to know the 2nd order polynomial fit coefficients(c) and respective errors(e) for

x= [-1.0788 -0.8210 -0.6931 -0.3930 -0.1393 0.0198]

y= [-0.6791 -0.9390 -0.9597 -1.2373 -1.3237 -1.3737]

I used command

[c e]=polyfit(x,y,2)

i got c = 0.3207 -0.2993 -1.3736

e = R: [3x3 double]

df: 3

normr: 0.0669

actually here c is ok (as per our calculation a2 a1 a0)

but e should come as 0.13484 0.14533 0.031

could you help me how to get the coefficients errors?

Thank you

madhu

on 12 Aug 2008 at 9:33 am 33Quan Quach

Madhu,

Have you tried using the cftool command? That might do the trick

Quan

33.

on 23 Aug 2008 at 1:12 pm 34baba

Good stuff here. I was hoping if someone could help me with this problem that I need to get around in an efficient way

(i.e I have to repeat this over many row vectors). Say, I’ve got 3 vectors :

A = [1 2 3 4];B = [5 6 7 8];C = [9 10 11];

(note the unequal dims). And I’d like to have a code that gives the following result:

Result = [1; 5; 9; 2; 6; 10; 3; 7; 11; 4; 8];

Thanks in advance for any help!

34.

on 23 Aug 2008 at 8:51 pm 35Quan Quach

Hi Baba,

Here is my idea:

%first, pad all vectors using NaN so that they are the same lengthC = [9 10 11 NaN]; %second, put all vectors into matrix formtemp = [A;B;C]; %third use the reshape functionResult = reshape(temp,numel(temp),1); %fourth, remove all NaNs

35.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

10 of 45 3/25/2011 1:43 AM

Result(isnan(Result)) = [];

Quan

on 20 Oct 2008 at 5:19 pm 36asur010

Hi Quan,

I find your tips very useful and to the point. Thanks for that..

I want to know of a way to find a particular element and its corresponding index from a vector if it is greater than

something. The find function usually returns all values which are greater than it, how can I just get the first number

which is greater than the specified value.

For example I have a vector = [40,50,60,60,70,80,90,91,92,93];

I want to find the first element which is >90 and its corresponding index in the original vector.

If I say find (vector>90) it gives all numbers >90.

Could you help out please?

Thanks.

Adi

36.

on 05 Nov 2008 at 4:50 pm 37Anonymous

Hi asur,

u can use

for i=1:numel(vector)

if vector(i) > 90

index=i;

break

end

end

37.

on 13 Nov 2008 at 6:32 am 38Graham

Hi,

I wonder if there is a built in function that would give me the number of times ‘k’ appears in a vector ? E.g. vec = [1 1

1 2 2 3 3 4 ] where k == 1

ans = 3

38.

on 14 Nov 2008 at 5:44 am 39Graham

sorry 4got to add,

Hi,

I wonder if there is a built in function that would give me the number of times ‘k’ appears in a vector without using the

hist function. ? E.g. vec = [1 1 1 2 2 3 3 4 ] where k == 1

ans = 3

39.

on 16 Nov 2008 at 1:27 pm 40wladmir

Thank you very much for your help and for your time!!! thank you very much!!!

40.

on 22 Dec 2008 at 3:03 pm 41Sathya

Hi asur,

41.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

11 of 45 3/25/2011 1:43 AM

you can use,

find(vector >90,1)

to get the index of the first number greater than 90 in the vector.

on 23 Dec 2008 at 12:06 am 42Zane Montgomery

Hi Graham,

You could use a very simple ‘for’ loop to track how many times a number appears in your vector.

soln=0;for n=1:size(vec,2) % gets the number of columns of the row vector if vec(n)==1 soln=soln+1; else endend

42.

on 23 Dec 2008 at 10:14 am 43Rob S.

@Graham, Zane,

…OR, you could shoot the “vectorizer” at this problem. Something like:

vec = [1 1 1 2 2 3 3 4 ] ; % if you want to count how many 1's sum(vec==1)

Hope this helps! Can’t find it right now, but there is a great post by Loren about indexing that I think covers logicals

like this. Also skim Steve’s blog for logical operations since they’re used in image processing a lot.

Merry Christmas!

Rob

43.

on 23 Dec 2008 at 9:39 pm 44Rob S.

@ Tanuj,

Since I’m on a roll with vectorizing and using logical indexing, I see you had an interesting problem farther up the

page. If you need to sum up all the elements of A that are greater than 3, try this:

A = [1 2 3; 4 5 6];sum(A(A>3))

Read the second line as “sum up the elements of A only where the elements of A are greater than 3″

I don’t want to duplicate what Loren’s and Steve’s blogs have covered about logicals, but this method basically

produces a “mask” vector of 1’s and 0’s the same size as A. It tells the sum function which elements to include and

exclude from its calcs.

I also like solutions based on logicals since they very often handle whole vectors at a time, and avoid using loops. Less

mess for you, and usually faster code.

HTH,

Rob

44.

on 02 Jan 2009 at 3:55 am 45fawx

hi

45.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

12 of 45 3/25/2011 1:43 AM

how do i insert elements into an array by shifting the remaining elements to the right?

eg .

a=1:5

now insert 8 and 9 between 2 and 3 such that

a= 1 2 8 9 3 4 5

thanks

on 02 Jan 2009 at 9:37 am 46Rob S.

@ fawx,

Unfortunately, this will be a fairly manual operation. I would initialize a new 1D array (lets call it b) of size a + the

inserts. Then fill it in with your values. Something like:

% create arrays to start witha = 1:5;inserts = [8 9];b = zeros(numel(a)+numel(inserts),1); % now fill in your valuesb(1:2) = a(1:2);b(3:4) = inserts(:);b(5:end) = a(3:end);disp(b);

HTH,

Rob

46.

on 02 Jan 2009 at 2:59 pm 47Zane Montgomery

@fawx

Rob’s method is extremely good for especially large arrays. Pre-assigning the size of arrays is good practice to improve

the processing speed.

Another way, using vector concatenation would be

a = 1:5;inserts = [8 9]; % force whatever elements you want between segments of your 1-D array.b=[a(1:3) inserts a(4:end)]

A few less lines, but can be harder for multi-dimensional arrays.

p.s. Thanks for the help with logicals Rob

47.

on 02 Jan 2009 at 10:48 pm 48fawx

Thanks a lot Rob S. and Zane Montgomery

that really helped a lot

fawx

48.

on 05 Feb 2009 at 8:14 pm 49rahul

Hi Dan,

Great tips !

I am stuck with a problem related to sorting of a vector:

I have following vector

49.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

13 of 45 3/25/2011 1:43 AM

vector = [1 1 0 0 0 1 1 1 0 1 1 1 0]

What I want to know is how are ones grouped together ?

In above vector they are grouped as = 2, 3, 2

How can I sort my vector this way as to reveal the groupings ..

Thank you

Rahul

on 05 Feb 2009 at 8:16 pm 50rahul

In above the ans should be

ans = 2,3,3

50.

on 12 Mar 2009 at 9:42 pm 51mohammed

hey great work Quan

thanks a lot

this stuff is great

51.

on 02 May 2009 at 6:35 am 52Yo

Hi guys,

First let me say that I find this blog superb. Thank you for having it.

My problem consist in averaging every 10 elements of an array (G) of size 100 and storing those averages. Here is my

solution:

k = 100;G = randn(k,1);Gav=mean(reshape(G,10,k/10));

This save me a lot of time, more than if I used a for loop instead, but still I would like to improve it further if possible.

Do you guys have another suggestion?

Thank you.

52.

on 02 May 2009 at 9:52 am 53Matt

Hello everyone, I’m sorry if this has already been answered, but is there no built-in function that returns the elements

you remove from an array? Example:

a = [1,11,111]

I want to return element 2 and 3 to create an array b, leaving a with only its’ first element intact:

a == [1]

b == [11,111]

Any such operator or do I need to create it myself? I’m not a programming guru so I’m not certain how to create this

functionality in the most efficient way.

Thanks in advance, I’m sure someone has a great answer to a beginner such as myself ^^

53.

on 03 May 2009 at 11:18 pm 54nagendra

to create logic gates by using matlab,program.

54.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

14 of 45 3/25/2011 1:43 AM

on 05 May 2009 at 9:14 am 55Yo

Hi Matt,

What you could do is before removing some elements of a(:), store them in another vector b(:). I solved your example

here:

a = [1,11,111];b=a(2:3); a(2:3)=[];

You can do more complicated stuff, for instance if you want to remove the elements of a(:) equal to 11:

a = [1,11,111];b=a(a==11); a(a==11)=[];

-Yo

55.

on 16 Jun 2009 at 5:25 am 56Johan, Jeppe

We have a vector with some values given by a function. We want to duplicate this vector N times, so we get a 2

dimensional matrix.

Eg,

{ 1 0 1 0 0 1 } Our vector

After the operation we want this result:

1 0 1 0 0 1

1 0 1 0 0 1

1 0 1 0 0 1

1 0 1 0 0 1

.

.

.

(N) times

Our try:

function Y = jail(X,p) [r,c] = size(X); %We want our duplicated array to be of this size.. t = 1:1:c;M = sin((pi*t)/p).^2 ;F = repmat(M,r,c);Y = F;

But this doesnt give us a 2 dimensional matrix.

Thanks in advance

56.

on 16 Jun 2009 at 7:12 am 57Zane Montgomery

@Johan&Jeppe,

I’m curious if the matrix you’re getting is 1-D or 3-D+? I would think it should still output as 2-D, just not the style that

you want.

Let’s call your vector ‘a’. Since you want to make a new matrix that is a column vector of many ‘a’ vectors, your

repmat should be repmat(M,N,1) where N is the N times you wanted above (aka ‘r’ in your code)

57.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

15 of 45 3/25/2011 1:43 AM

function Y = jail(X,p) [r,c] = size(X); %We want our duplicated array to be of this size.. t = 1:1:c; %1:c works too, by default it increments 1 every timeM = sin((pi*t)/p).^2 ;F = repmat(M,r,1); %changedY = F;

This will stack the matrix/vector on top of itself r times. Hope that helps!

-Zane

on 17 Jun 2009 at 2:26 am 58Johan, Jeppe

Thanks Zane for the quick response, this solved our problem.

58.

on 20 Jun 2009 at 5:46 pm 59Nick Iversen

How do I return the, say, first element of an array expression without storing the

expression into a temporary variable first? Eg

result = first(expression); % rather than tmp = expression;result = tmp(1);

59.

on 23 Jun 2009 at 8:53 pm 60Tariq

Hi .. Its really usefull wesite.. I need to know how to get the average of group of vectors…Lets say we have:

A=[1 3 5]

B=[4 7 1]

C=[8 9 0]

is there anyway to get the average of A,B and C??

60.

on 23 Jun 2009 at 9:06 pm 61bluray

I wanted to insert the zero column vector in the matrix. I have this matrix

[1 0 0 1

0 0 1 1

1 1 1 0

0 1 0 1]

How do I convert it to

[1 0 0 0 0 0 1 0

0 0 0 0 1 0 1 0

1 0 1 0 1 0 0 0

0 0 1 0 0 0 1 0]

Thanks

61.

on 25 Jun 2009 at 12:43 pm 62Circshifter

Hi Quan,

Thanks for all of the tips. I HATED shifting vectors! It’s not practical in most cases. Quan, you should check out the

circshift command… it’s easy and you just enter the ammount that you want the vector shifted (you do however, have

to convert the vector into a colum vector…):

62.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

16 of 45 3/25/2011 1:43 AM

u = [1:10];u1 = (circshift(u',3))' % This shifts vector "u" 3 places to the right, and places the last three elements % in the first three places!

on 27 Jun 2009 at 10:19 pm 63nirveda

hey,

i’ve done a blunder by performing a set of operations on the wrong array, due to typing error. The array content has

now changed..i.e. its size has increased and values modified.Is there any way to rollback this to the original state? or do

i have to recode by rote? there’s really lengthy stuff preceeding it..

thanks,

nirveda

63.

on 30 Jun 2009 at 3:23 pm 64jose velez

How would I create a 200 by 100 array

size=250*100;time=1:size;time=reshape(A,250,100)

Now

how would i filled the values of this array to

[1 2 3 4 .....

101 102 103...

201 202 203

]

64.

on 06 Jul 2009 at 3:13 pm 65sf

jose velez:

To create 200 x 100 array:

myarray = ones(200,100);

To fill it in with what you wanted:

for index = 1:200 myarray(index,:) = (index*100 - 99):(index*100);end

There might be a better way than the for loop, but this will do the job quite nicely.

65.

on 12 Jul 2009 at 5:16 pm 66Jose

The issue: I have two arrays filled with important data.

Array1 is an array of size 31 x 31 array

Array2 is an array of size 31 x 21

I tried this but it only it only if the array is 1 dimensional.

for i=1:9,

t = [t 0];

end

Example

array= [1 2;

1 2;]

how do i transform the previous array to look like

array =[1 2 0 0 0;

1 2 0 0 0;]

66.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

17 of 45 3/25/2011 1:43 AM

Keep in mind I cant do it manually it has to be by MATLAB code because is a 31 x 31 array ( lots of numbers)

Thank you for your efforts.

on 14 Jul 2009 at 8:04 am 67Zane Montgomery

Jose,

Try this out:

%Array1 is 31x31%Array2 is 31x21 ArrayNew=[Array2 zeros(31,10)]

This concatenates a zero array of size 31×10 after you original 31×21 array2. You can play around with that, but it is

very specific on dimensions of each array. This can also be expanded/parametrized for an MxN array –> MxM array.

Good luck!

-Zane

67.

on 14 Jul 2009 at 9:53 am 68Jose

That worked Zane you are a genius.

68.

on 15 Jul 2009 at 10:23 am 69Anonymous

% hi guys, i'new @ matlab, this very good matlab site% i could need some help plz% i have wind speed data (winspd) &amp; wind direction in different array% i want to calculate wind and direction data so i have north-south component % which contain wind speed and north (+)- south direction(-). %my arraywindspd = [1,2,3;4,5,6;7,8,9]winddir = [30,60,120;135,180,210;225,250,300] % code not running yet, i have problem how to calculate in array with 2% variabel &amp; calculate north-south direction in winddir so i have north-south wind speed component % north(0), east (90), south(180) &amp; west (270)% correct me if i'm wrong with the if logic calculation i'm still new in matlab if winddir (find(winddir&gt;=0 &amp; winddir=90 &amp; winddir=180 &amp; winddir=270 &amp; winddir&lt; winddir = cos(winddir*(pi/180))end north_south = winspd .* winddir %north-south component excpected resultnorth_south = [0.86602, 1, -1.5; -2.8284, -5, -5.19615;-4.94974,-0.34202, 4.5] % many thx be4 :D

69.

on 15 Jul 2009 at 10:30 am 70Budhie

oops forget to fill my name…thx be4 guys.

70.

on 17 Jul 2009 at 7:38 am 71Zane Montgomery

Hi Budhie,

Somethings wrong with your ‘if’ statement, but that’s not how I usually code in MATLAB, but let me show you a cool

tip.

It looks like you’re just trying to convert the original winddir vector from degrees to radians and then taking the N/S

(cosine) component of it?

Two ways to do that:

71.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

18 of 45 3/25/2011 1:43 AM

WinddirRad=winddir*pi/180;WinddirNS=cos(WinddirRad);

But even easier, MATLAB has built in capability to handle degree measurements:

WinddirNS=cosd(winddir);% and you're done!

cosd(),sind(),tand() are your functions if your angle is in degrees.

And to get your desired solution:

north_south = windspd.*WinddirNS;

That got me what you were looking for, hopefully it works for you too.

-Zane

on 31 Jul 2009 at 1:51 am 72Budhie

HI Zane,

its works, thanks for the cool tips :D. yes i want to separete the wind component. but i still have problem doing

operation in array.

i want to do something like this :

a = [1,2,3;4,5,6;7,8,9] %wind speed b = [30,60,120;135,180,210;225,250,300] % wind direction % i want to do operation between 2 array, but only on wind direction selected value and keep other value in array % how i can do that in matlab? if (b &gt;=90)&amp;(b=180)&amp;(b&lt;270) a = a*cosd(b-180) end end %expected results in 3x3 array a = [1,2,2.59807;2.82842,-5,-5.19615;-4.94974,-2.73616,9]

thx be4,

-budhie-

72.

on 31 Jul 2009 at 1:53 am 73Budhie

hmm the matlab code doesn’t properly display my code…

a = [1,2,3;4,5,6;7,8,9] %wind speed

b = [30,60,120;135,180,210;225,250,300] % wind direction

% i want to do operation between 2 array, but only on wind direction selected value and keep other value in array a

that not selected.

% how i can do that in matlab?

if (b >=90)&(b=180)&(b<270)

a = a*cosd(b-180)

end

end

%expected results in 3×3 array

a = [1,2,2.59807;2.82842,-5,-5.19615;-4.94974,-2.73616,9]

73.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

19 of 45 3/25/2011 1:43 AM

thx be4,

-budhie-

on 31 Jul 2009 at 1:55 am 74Budhie

sry if double posting…:D

if (b >=90)&(b=180)&(b<270)

a = a*cosd(b-180)

end

end

74.

on 31 Jul 2009 at 1:55 am 75Budhie

if (b >=90)&(b=180)&(b<270)

a = a*cosd(b-180)

end

75.

on 31 Jul 2009 at 1:57 am 76Budhie

if (b >=90) & (b<180)

a = a.*sind (b-90)

76.

on 31 Jul 2009 at 1:58 am 77Budhie

else if (b >=180)&(b<270)

a = a*cosd(b-180)

77.

on 31 Jul 2009 at 1:59 am 78Budhie

end

end

sry doesn’t display m if correctly…

thx be4,

-budhie-

78.

on 03 Aug 2009 at 7:26 pm 79Kalo

How do I make a plot using h=pcolor for 210×1 matrix

79.

on 14 Sep 2009 at 1:57 am 80Malaika

Hello,

I am relatively new to Matlab, and I am looking to a solution for.

I have a matrix for e.g.

A = [ 2.1 1.2 2.3 1.3 1.3 3.4 5 2 6 8.4 5.4 5.4 3.4 5 2 4.4 2.2 4.5]

now there appears 3.4, 5 and 2 twice consecutively in the above code, and I see it as a pattern. I need some solution to

extract these values at a certain min threshold to max threshold sequence.

So, how can i do it to extract a particular pattern out of the code.

Alternatively I have seen in this very useful blog that values greater than / less than in a vector can be replaced by

some, but is there some solution that a block of values be replaced by some value for e.g. all values greater than 3 and

less than 7 be changed to 0 in a vector.

80.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

20 of 45 3/25/2011 1:43 AM

I will highly appreciate help in this regards,

/Malaika.

on 13 Oct 2009 at 4:53 am 81Anonymous

I have 2 vectors say a = [1 2 3] and b= [4 5 6]. I want to do something like this

c(1) = min( a(1) - b(1), a(1) - b(2), a(1) - b(3));

c(2) = min( a(2) - b(1), a(2) - b(2), a(2) - b(3));

c(3) = min( a(3) - b(1), a(3) - b(2), a(3) - b(3));

Can i do this without using loop with the help of array indexing or vectorising?

81.

on 20 Oct 2009 at 5:00 pm 82Tim

hi,

Is there a efficient way to replace all values in the array that is greater than 0 with 1s and rest with zeros while

maintaining the dimensions of the array.

e.g. a={ -1.2, 0.12, 1.5 , -0.009, 2} to a={ 0,1,1,0,1}

great site by the way.

82.

on 21 Oct 2009 at 7:37 am 83Zane Montgomery

Tim,

I’d recommend creating a new variable b to store you 0s/1s array, but other than that it’s easy.

a=[-1.2, 0.12, 1.5 , -0.009, 2];b=a>0; %note: zero gets mapped to a zero logical

And you’re done!

2 quick notes:

1) B is an array of logicals

2) Make sure you’re using ‘array’ notation ‘[ ]‘, not ‘cell’ notation ‘{ }’ The cells is an array of 1×1 arrays and you’ll

have to access each element individually to evaluate.

Good luck,

Zane

83.

on 09 Nov 2009 at 2:44 pm 84lokise+o

@ malaika some pseudocode : you could try to get indices

find occurences of first value and sav index array

idx = find(args(1)) and loop

add + 1 after each cycle to the idxold+1 (6 13) => idxnew (7 14) and so on

test next argument like this (you can take length, sum, mean or numel of idx array)

if mean(A(idxnew)) == val2 continue and increment pattern counter

else break

loop condition then would depend on flexibel vector length 3.4 5 2 …

testvector = vect(1:pos)

hope it was helpful

84.

on 11 Nov 2009 at 3:40 am 85packiyaraj

hi everyone ,

This website is really useful for us. plz i need a help . How to group an array elements within range. plz help me.

85.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

21 of 45 3/25/2011 1:43 AM

on 12 Dec 2009 at 6:25 pm 86Daithi

Hi - I am looking to convert a number to a 5 bit binary digit. Say 5 for example;

&gt;&gt; dec2bin(5) ans = 101

I am looking for a 5 bit answer, 00101

Any help is appreciated,

Thanks

86.

on 15 Dec 2009 at 2:19 pm 87Zane Montgomery

Daithi,

Try dec2bin(x,b) where x is your decimal number and b is the number of bits.

GL,

Zane

87.

on 03 Jan 2010 at 5:40 am 88krishh

I have a array of dimension 5X16 ( 5 rows and 16 columns ) . I want to separate it into 2 matrices having dimensions

5X8 and 5X8 with odd columns in one group and even columns in other group using matlab

88.

on 15 Jan 2010 at 11:14 pm 89hcu

hii all..

i hav a variable x=[1 3 4]

i need to convert each value i.e. x(1,1), x(1,2), x(1,3) into binary and store in an array

eg: Bin=[001; 011; 100].can anyone plz help me in writing d code for it in matlab…??

Thanks in advance!!

i/p: [1 3 4]

o/p:[001;011;100]

89.

on 27 Jan 2010 at 3:05 pm 90Murphy

how do you remove all the even numbers from a vector?

90.

on 01 Feb 2010 at 11:43 am 91SPQR

Murphey,

a = [1 2 3 4 5 6]

a(rem(a,2) == 1) = []

The remainder function will flag all odd numbers with a 1, and then you simply ask which are equal to one and destroy.

91.

on 01 Feb 2010 at 11:52 am 92SPQR

krishh,

Here’s an example:

a = [1 2 3 4;5 6 7 8]

b = a(:, 1:2:end) % odd columns

c = a(:, 2:2:end) % even columns

The ‘b’ and ‘c’ equations would remain the same for any size a.

92.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

22 of 45 3/25/2011 1:43 AM

on 12 Feb 2010 at 1:39 pm 93Hank

I have to vectors A and B. I need to form a new vector C that looks as follows.

A=[1 3 5]

B=[2 4 6]

%Below is what C should be

C=[1 2 3 4 5 6]

93.

on 12 Feb 2010 at 1:40 pm 94Hank

I have to vectors A and B. I need to form a new vector C that looks as follows.

A=[1 3 5]

B=[2 4 6]

%Below is what C should be

C=[1 2 3 4 5 6]

Thank you very much for you time

94.

on 17 Feb 2010 at 8:07 am 95SPQR

Hank,

Essentially do the opposite of my last example:

A=[1 3 5]

B=[2 4 6]

C = zeros(1,length(A)*2); % initialize C

C(1:2:end) = A % place A’s contents into C starting at 1, then 3, etc.

C(2:2:end) = B % place B’s contents into C starting at 2, then 4, etc.

And a correction to comment #91 - I obviously removed all the odd numbers instead of the evens as asked.

Change:

a(rem(a,2) == 1) = []

to:

a(rem(a,2) == 0) = []

this will flag the even numbers for removal.

95.

on 24 Feb 2010 at 2:18 am 96sangeeta

[1 0 2 0

3 0 4 0]

should becom

[1 2

3 4]

96.

on 26 Feb 2010 at 8:54 am 97SPQR

sangeeta,

See Post #92

97.

on 26 Feb 2010 at 10:28 am 98Anonymous

[199 0 185 0 214 0 63 0

0 188 0 207 0 158 0 89

186 0 201 0 194 0 63 0

98.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

23 of 45 3/25/2011 1:43 AM

0 201 0 196 0 159 0 86

196 0 162 0 204 0 55 0]

in this matrix all zeros should be deleted and resulting matrix should be

[199 185 214 63

188 207 158 89

186 201 194 63

201 196 159 86]

on 01 Mar 2010 at 7:21 am 99SPQR

There is a problem when attempting to “delete” the zeros - or any value - from a matrix. If there is not a square data

set contained within a larger, padded set you will not be able to operate on it efficiently. I think you need to ask

yourself why are you arriving at this position? What operation is forcing you to take such an action? The best solution

would be to come up with a better algorithm that wont leave you with your back against the wall.

Again, the example above is quite symmetric. It would require initializing a new matrix and then filling it in as my posts

above show.

99.

on 16 Mar 2010 at 2:23 am 100bluray

I need to select 2 elements from each column depending on the index.

Lets say the matrix is

[1 3 8

6 9 2

5 8 9

7 6 3]

If we have an index [1 1 1], the resulting matrix is

[1 3 8

6 9 2]

If we have an index [1 2 1], the resulting matrix is

[1 8 8

6 6 2]

May I know how do we do that? Thank you

100.

on 19 Mar 2010 at 8:01 pm 101sonal

can u tell me how to convert the text file containing ascii code into binary number and store in array in matlab………..

101.

on 22 Mar 2010 at 2:47 am 102Stud

Hello,

how can i make from the following line:

5 5 5 5 5 6 6 6 6 7 7 7 8 8 9

Matrix like this:

1 5 5 5 5 5

0 1 6 6 6 6

0 0 1 7 7 7

0 0 0 1 8 8

0 0 0 0 1 9

0 0 0 0 0 1

102.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

24 of 45 3/25/2011 1:43 AM

Has anyone ideas?

Thank you!

on 26 Mar 2010 at 9:29 am 103ali

how I can change the position of one element without changing the size of the matrix.

x=[ 0 1 1 0 1]; to x= [ 1 1 0 0 1];

Thanks

103.

on 26 Mar 2010 at 9:35 am 104ali

how I can change the position of one element without changing the size of the matrix.

x=[ 0 1 1 0 1]; to x= [ 1 1 0 0 1];

Thanks

104.

on 28 Mar 2010 at 5:06 am 105waqas

hi

i want to remove the row of zeros for a matrix

1 1 1 1

2 2 2 2

0 0 0 0

5 5 5 5

to

1 1 1 1

2 2 2 2

5 5 5 5

i tried too many way but couldnt find the right way.

105.

on 01 Apr 2010 at 2:12 pm 106Zane Montgomery

@ali

I’m not quite sure I know what you’re getting at, but you could use something like:

x=[ 0 1 1 0 1];x_new=[x(3) x(2) x(1) x(4:5)]

This is very specific to this problem and gets trickier the more times elements need to be swapped. It works well for

large segments of unchanged vectors like you see in the last vector element. It could be x(4:500) if those are all

unchanged which saves lots of time.

@waqas

Thanks to a recently inspired video by Doug @TMW (http://blogs.mathworks.com/videos/) this solution is very easy.

If ‘a’ is your original matrix:

a(3,:)=[]

will remove the entire third row.

enjoy!

106.

on 09 Apr 2010 at 4:46 am 107Matt

Hi, I’ve got a problem.

I define a matrix like this for exampel:

107.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

25 of 45 3/25/2011 1:43 AM

&gt;&gt; j = [1,6,6;1,2,3;6,5,4] j = 1 6 6 1 2 3 6 5 4

Now if I do this:

length(j(j==6))

I get 3 of course. What I want to do is count any number of occurences per row as one occurence, that is; even if one

row contains 1, 2 or 3 sixes it should only return 1. Is this possible? I hope it is clear what I want to do.

&gt;&gt; j = [1,6,6;1,2,3;6,5,4;6,6,6;1,2,2;4,3,2] j = 1 6 6 &lt;-- this row contains at least 1 six 1 2 3 &lt;-- this row contains no sixes 6 5 4 &lt;-- this row contains at least 1 six 6 6 6 &lt;-- this row contains at least 1 six 1 2 2 &lt;-- this row contains no sixes 4 3 2 &gt; occurence(j, 6) &lt;-- pseudofunction ans = 3 &lt;-- amount of rows containing at least one six

on 09 Apr 2010 at 4:50 am 108Matt

Sorry for the post, it seems to have trouble interpreting special characters such as > and <. I hope it is readable

anyway.

What I am asking is whether there is any way to count each row in a matrix once if it contains at least one six for

example.

108.

on 13 Apr 2010 at 3:45 pm 109Zane Montgomery

Hi Matt,

Multiple ways to do this, but i think the most elegant way is to use the ‘find’ command. I switched your ‘j’ variable to

‘a’ because ‘j’ is a MATLAB variable for the imaginary number sqrt(-1)

a = [1,6,6;1,2,3;6,5,4;6,6,6;1,2,2;4,3,2][row,col] = find(a==6);length(unique(row))

I highly recommend you figure out how each line does what it does.

Best,

Zane

109.

on 14 Apr 2010 at 9:10 pm 110Gumah

hi

i want to add one column of zero whenever column of zero is exist

1 0 1 1 0 1

2 0 2 2 0 2

3 0 3 3 0 3

5 0 5 5 0 5

to

1 0 0 1 1 0 0 1

2 0 0 2 2 0 0 2

3 0 0 3 3 0 0 3

110.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

26 of 45 3/25/2011 1:43 AM

5 0 0 5 5 0 0 5

any body know how to do that ??

on 30 Apr 2010 at 8:19 pm 111emmi

The code at entry number 24 is very nice. However if I have a matrix after applying this, the matrix becomes a row

vector. How can I use this, and let the matrix stay as it is?

24.How to remove all elements greater than 5 from a vector.

myVector = [10 0 0 1 12 3 0 0 4 5 1 12 0 0]; %index contains indices of elements within myVector which are greater than 5index = find(myVector &gt; 5);myVector(index) = []

111.

on 30 Apr 2010 at 8:36 pm 112emmi

Let’s say my matrix is sth like this:

I wan to get rid of the zero lines. But I want to preserve the matrix. How can I do that?

Secondly, if I have similar matrices in a multidimensional matrix, is there a difference? Let’s say I have 3 of these

matrices in A(:,:,1), A(:,:,2) and A(:,:,3) and I want to get rid of the zeros from all of these matrices.

Thanks in advance for the help.

-0.2498 -0.9092 0.3255 0.3564 0.7989 0.2441 37.7547 292.3663 -0.2333 -0.9699 0.3273 0.3449 0.7641 0.2366 34.5573 304.3396 -0.1999 -0.9938 0.3223 0.3256 0.7279 0.2234 29.0925 302.9826 -0.2063 -0.9832 0.3317 0.3219 0.7204 0.2324 29.1262 296.5975 -0.2159 -0.9638 0.3346 0.3153 0.7109 0.2302 29.1044 286.3701 -0.2189 -0.9378 0.3334 0.3019 0.7017 0.2298 27.7276 273.8610 -0.2156 -0.9474 0.3348 0.2959 0.6668 0.2279 26.7218 267.9965 -0.2138 -0.9639 0.3315 0.2879 0.6314 0.2147 25.6377 265.1570 -0.2098 -0.9597 0.3267 0.2791 0.6331 0.2031 24.3022 263.9478 -0.2090 -0.9472 0.3249 0.2740 0.6209 0.1980 23.6842 256.1645 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

112.

on 03 May 2010 at 2:19 pm 113Zane Montgomery

Emmi,

the most recent posts in the comment area show this pretty well. Try those out and get back with any other questions.

113.

on 05 May 2010 at 1:43 pm 114Drew

Hi,

I am wanting to plot both of these files on the same graph for the functions below:

x=0:0.1:3*pi;

y1=sin(x+0.5);

y2=90.*sin(x-0.5);

what would go on this line to plot both files on the graph?

Thanks in advance!

114.

on 09 May 2010 at 2:53 am 115sonny

Hi,

115.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

27 of 45 3/25/2011 1:43 AM

I have a question on removing multiple rows from a matrix. I knew we can remove rows that we want but specifying

all rows index. But my matrix is quite big and how I can remove all the even row without specifying all the rows

index?

A=eye(100);

indicesToRemove = [2,4,6,8,10, ......... 100]; %i want to make this flexible or how to make a simple loop calling the

indicesToRemove?

The output A will have the size of [50x100]. Thanks in advance.

on 10 Jun 2010 at 9:17 am 116fado

hi,

i want to remove multiple lines (7*i) index ,But my array is big (4461X1)

can you help me plz?

Thanks .

116.

on 13 Jun 2010 at 2:41 am 117jyoti sahu

prob:[4 5 9 10 13 15 18 19 6 9 11 14 4 6 9 10 3 6 7 2 2]

this is 1D array………….

answer should be [4 5 9 10 13 15 18 19 6 11 14 4 3 2]

how can i reach this answer?

117.

on 28 Jun 2010 at 2:35 am 118Bertus

@sonny/fado,

I would do it like this:

A=eye(100);

for i=2:2:100

A(i,:)=[];

end

118.

on 28 Jun 2010 at 2:40 am 119Bertus

oh btw, an easy way of converting a matrix to a vector:

matrix=magic(5);

vector=matrix(:);

119.

on 28 Jun 2010 at 10:01 am 120SPQR

Sonny, Fado, and Bertus:

You want to use logical indexing. Instead of using the ‘for’ loop, as bertus did, you simply index into the matrix all at

once.

Instead of

A=eye(100);

for i=2:2:100

A(i,:)=[];

end

You directly call the rows and annihilate

A = eye(100);

A(2:2:end,:) = [];

120.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

28 of 45 3/25/2011 1:43 AM

Keep in mind that my solution works for any size matrix to get rid of the even rows. For odd rows you would write

A(1:2:end,:). For columns you call them A(:,2:2:end). It keeps going for higher dimensions.

Im not entirely sure about fado’s case whether he wants to annihilate every seventh row, or seven rows in a block. I

would either call:

A(1:7:end,:) = [];

or

A(1:7,:) = [];

on 29 Jun 2010 at 1:40 pm 121Jason

Greetings:

A=[1:0.1:4]';B=[1;1;1;1;5;5;5;5;1;1;1;1;1;1;7;7;7;7;1;1;1;1;1;1;1;1;1;1;1;1;1]; C=A(find(A&gt;=B));

C of course is a vector of values in which A >= B:

C = 1 1.1 1.2 1.3 1.8 1.9 2 2.1 2.2 2.3 2.8 2.9 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4

What I need however is to include the first element in the subsection that is not included with the find. So for example:

C = 1 1.1 1.2 1.3 1.3 % &lt;-- first element in the array associated with the index that is not included u 1.8 1.9 2 2.1 2.2 2.3 2.4 % &lt;--- first element in the array associated with the index that is not included 2.8 2.9

121.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

29 of 45 3/25/2011 1:43 AM

3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4

I’m having some trouble explaining this so I hope it make sense. Please email if you can help. And great site by the

way!!!

on 30 Jun 2010 at 9:01 am 122Zane Montgomery

yup, lost. dunno what your ‘group’ and ’subsection’s are referring to.

Can you make a smaller simplified example?

122.

on 30 Jun 2010 at 1:28 pm 123Jason

find() of course returns the indicies that match, so in my example above:

idx = find(A&gt;=B); idy = find(A&lt;B);

returns the indicies from A where A is greater than B. Let’s say for example the above code returns the indicies:

idx = 1 2 3 4 10 11 12 16 17 18 idy = 5 6 7 8 9 14 15

So at index 1-4, 10-12, and 16-18, the element in A is >= than in B.

What I need is to return the first index in each excluded group - the first element in each group where A < B. Call this

situation X. So for example:

idx = 1 2 3 4 5 &lt;--- This is X 10 11 12 13 &lt;--- This is X

123.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

30 of 45 3/25/2011 1:43 AM

16 17 18

So index number 5 and index number 13 appear where A < B but they are included in the vector. 5 and 13 are

elements in idy.

on 30 Jun 2010 at 3:31 pm 124Zane Montgomery

Ahh I think I see that. I’m guessing there are multiple ways to do it but I’ll try to explain the ‘how’ of what I’d do.

Key: Keep everything in terms of indices until the very end since that’s what you are comparing. And then the very

last step should be to pull in the value of the specific indices to your solution vector.

My method involves checking to find increments of 1 in your indices and returns the index + 1 which are your desired

additions (5 and 13 in your example). The final line adds 5 and 13 into your idx index array. One note: the final line

only allows for 2 new indices to be added. If you know how many, you should be able to follow the pattern. If it is

variable, I would recommend using another for loop (1:number of new indices) and adding each new one to idx every

iteration.

vi=[]; for n=2:length(idx) if idx(n) > idx(n-1)+1 vi=[vi n-1]; else endend m=idx(vi)+1; idz=[idx(1:vi(1)); m(1); idx(vi(1)+1:vi(2));m(2); idx(vi(2)+1:end)];

Hopefully that’s a start and you can expand from their to your desired end goal. There might be a more elegant way of

doing it, but it should do the trick.

Best,

Zane

124.

on 01 Jul 2010 at 11:59 am 125SPQR

Jason,

A more robust, and I believe elegant, solution is below:

A=[1:0.1:4]‘;

B=[1;1;1;1;5;5;5;5;1;1;1;1;1;1;7;7;7;7;1;1;1;1;1;1;1;1;1;1;1;1;1];

C=A(A>=B);

D = zeros(length(A),1);

D(A>=B) = A(A>=B);

D(D == 0 - circshift(D == 0,1)) = A(D == 0 - circshift(D == 0,1));

D(D == 0) = [];

So we create D equal in size to A -> place all logically true values into D, respectively -> find all logically false indexes

(D == 0) and then use cirshift to find the leading edge, place “leading-edge false” data into D -> get rid of extra zeros

125.

on 13 Jul 2010 at 6:59 am 126Jason

Wow, thanks guys. Both solutions work but like SPQR says, the second one is a bit more robust for my purposes. I’m

still working to implement the code so I’m not sure if it will work as I hope (albeit the code provided here does

EXACTLY what I asked for).

126.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

31 of 45 3/25/2011 1:43 AM

Thanks.

on 09 Aug 2010 at 12:42 pm 127Andre

My question

How can I get every data at every 5 numbers in a vector.

For example:

A =123456789101112131415... (hundreds of numbers)

And I have a data every 5 datas, like:

Result:

Result =15913... (hundreds of numbers)

Thanks a lot for all

127.

on 16 Aug 2010 at 8:39 am 128Zane Montgomery

Andre,

This can be done quite easily, you want to sample your column vector every n index values. It looks like your solution

starts at 1 and then gets every ‘4′ after that, not 5. That’s an easy fix regardless.

A=1:2000; %creates your vector from 1-2000 (as an example), same as 1:1:2000sol=A(1:4:end); %starts at 1 and captures every 4th value after that until end of vector A

128.

on 16 Aug 2010 at 10:14 pm 129anita

Hi all,

I need the matlab code for duplicate elimination in an array…

kindly help me..i tried using the following code. couldnt get ….

clc;clear all;close all;a=[1 1 1 3 6 6 5 7 7 7 7 ];k=1;b(k)=a(1); l=numel(a);

129.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

32 of 45 3/25/2011 1:43 AM

for i=2:l for j=1:k if a(i)==b(j) break; else k=k+1; b(k)=a(i); display(b); break end end end display(b);%insert code here

Thank U..

on 18 Aug 2010 at 10:45 am 130SPQR

anita,

a=[1 1 1 3 6 6 5 7 7 7 7 ];

b = unique(a)

130.

on 01 Sep 2010 at 3:16 pm 131Dingo

I have a one column vector that contains a series of azimuthal angles between 0 and 180

ex.

Azimuth=

0

10

156

26

120

56

180

etc…

I would like to replace all the values between 90 and 135 with 135.

So if Azimuth>90 and Azimuth<135 then Azimuth = 135.

How can I go about doing that in Matlab?

Any help is much appreciated!

131.

on 02 Sep 2010 at 7:42 am 132Zane Montgomery

Here ya go Dingo:

Azimuth(Azimuth<135 & Azimuth>90)=135;

132.

on 08 Sep 2010 at 12:55 am 133Tannistha

Thanks a lot, i have been slogging over filtering an array and a cellarray of strings. i did something to get the position of

133.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

33 of 45 3/25/2011 1:43 AM

the elements that will stay ,in an array and had no idea how can i keep only those elements whose position was

recorded and your vector tutorial gave me the idea

thanks a lot

on 09 Sep 2010 at 4:38 am 134tapos

hi,

how can i extract and change data from a multi-dimensional matrix?

i can create a matrix containing all zeros or ones using v=ones(8,8,8); then i need to modify some of the elements using

conditional statement depending upon the position of the elements.

can anybody help me?

134.

on 09 Sep 2010 at 10:58 pm 135Zane Montgomery

Tapos, you’ll have to be a bit more specific. Do you have data or a more detailed need? If you want to call an entire

row, column, or depth value, the colon ‘:’ mean ‘all’.

Lets say you have an 8×8x8 3D matrix like you described.

To get 1 point of the matrix use:

x=v(2, 2, 2)

To get 1 (row) vector of the matrix use:

x=v(:, 2, 2)

To get 1 (column) vector of the matrix use:

x=v(2, :, 2)

To get a 2D depth array of the matrix use:

x=v(:, :, 2)

etc…

Just keep playing around with those and look at other comments/questions to hopefully find your answer.

good luck.

135.

on 11 Sep 2010 at 1:27 pm 136John. S.

How do you remove all even integers out of a vector. Lets Say

vec=[45 8 2 6 98 55 45 -48 75]

136.

on 13 Sep 2010 at 10:14 am 137Zane Montgomery

John. S.,

Try this trick:

vec(~mod(vec,2))=[]

I encourage you to figure out what that does!

Best,

Zane

137.

on 18 Sep 2010 at 5:30 pm 138rudra138.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

34 of 45 3/25/2011 1:43 AM

how is it that as we run our for loop, the values of an array are appended? lets say we have a nested function, how do

we create arrays as the for loop proceeds?

on 20 Sep 2010 at 12:19 pm 139Zane Montgomery

I think I know what you’re talking about Rudra.

If you want to start from a blank array, then fill it with a new value every iteration try this:

xx=[] %preallocate your answer vector 'xx' %for loop code hereforyy=42 %this is your calculated value that changes every iterationxx=[xx yy]; %this is the key code here that appends the new value to the end of the old xx vecto end %end of for loop

good luck,

Zane

139.

on 21 Sep 2010 at 10:28 am 140Jason

Greetings all:

Imagine I have two 2-dim arrays:

xs = [

59, 24.5, 25.5, 26.5, 4;

1727, 21.5, 22.5, 23.5, 9;

1840, 21.5, 22.5, 23.5, 9;

2252, 22.0, 23.0, 24.0, 4;

2445, 22.0, 23.0, 24.0, 4

]

[

x11, x12, x13, x14, x15;

x21, x22, x23, x24, x25;

x31, x32, x33, x34, x35;

x41, x42, x43, x44, x45;

x51, x52, x53, x54, x55

]

ys= [

159, 124.5, 125.5, 126.5;

1227, 121.5, 122.5, 123.5;

1340, 121.5, 122.5, 123.5;

1452, 122.0, 123.0, 124.0;

2945, 122.0, 123.0, 124.0

]

[

y11, y12, y13, y14, y15;

y21, y22, y23, y24, y25;

y31, y32, y33, y34, y35;

y41, y42, y43, y44, y45;

y51, y52, y53, y54, y55

]

Assume the first column of each matrix is a timestamp which can be compared to each other (e.g. TS0 < TS1 == True).

I’m using the minutes and seconds only for sake of brevety (e.g. 59 is 59 seconds after the hour/minute; 1727 is 17

minutes 27 seconds after the hour, etc)

140.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

35 of 45 3/25/2011 1:43 AM

The return value must be a third matrix, nm, where the first timestamp column will survive and the remaining columns

will be joined in one of two ways:

1. First way is to join the arrays if either element has changed.

So the result should look like this:

nm = [

159, 24.5, 25.5, 26.5, 4, 124.5, 125.5, 126.5;

1227, 24.5, 25.5, 26.5, 4, 121.5, 122.5, 123.5;

1452, 24.5, 25.5, 26.5, 4, 122.0, 123.0, 124.0;

1727, 21.5, 22.5, 23.5, 9, 122.0, 123.0, 124.0;

2252, 22.0, 23.0, 24.0, 4, 122.0, 123.0, 124.0;

]

[

y11, x12, x13, x14, x15, y12, y13, y14; % element in y changes; x does not

y21, x12, x13, x14, x15, y22, y23, y24; % element in y changes; x does not

y41, x12, x13, x14, x15, y42, y43, y44; % element in y changes; x does not

x21, x22, x23, x24, x25, y42, y43, y44; % element in y does not change; x does

x41, x42, x43, x44, x45, y42, y43, y44; % element in y does not change; x does

]

2. Second way is to join the arrays if both elements have changed.

So the result should look like this:

nm = [

159, 24.5, 25.5, 26.5, 4, 124.5, 125.5;

1727, 21.5, 22.5, 23.5, 9, 122.0, 123.0

]

[

y11, x12, x13, x14, x15, y12, y13, y14

x21, x22, x23, x24, x25, y42, y43, y44

]

I’ve made far too many attempts to post code here, but essentially I’ve been able to return a matrix to (kind of) match

case 1:

[

159 124.5 125.5 126.5;

1227 121.5 122.5 123.5;

1452 122.0 123.0 124.0;

1727 21.5 22.5 23.5 9;

2252 22.0 23.0 24.0 4

]

but this is not complete of course because it does not actually “join the arrays”.

I’m new in MATLAB and appeal to the community for help!

on 21 Sep 2010 at 3:27 pm 141Zane Montgomery

Jason, i’m trying to go through the logic here but it’s a bit confusing not knowing the problem or the same level of

detail you do. I’m not sure how you’re comparing your matrices or how you get the desired matrix value you want

(one confusion is your ys matrix is 5×4, but your variable ys matrix is 5×5 while all other inputs are 5×5 too; are you

missing a column in ys?). It looks like you need some help creating the logicals of the comparator and then apply that

to concatenating 2 matrices in different ways depending on the logical value.

Summary. I’m not sure how your values are ‘changed’ in the following sentences:

141.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

36 of 45 3/25/2011 1:43 AM

“1. First way is to join the arrays if either element has changed.”

“2. Second way is to join the arrays if both elements have changed.”

Could you give an example using 3×3 matrix perhaps?

ttys.

on 22 Sep 2010 at 5:16 am 142Jason

Thanks for the response - this is a bit difficult for me to explain, but here goes:

The arrays represent price series for derivative (credit default swaps) securities. The goal of the project is to use the

joined matrix to run robust regressions (OLS rejection, winsor, ORD, etc.).

The securities trade infrequenty without a “closing price” like stocks so we cannot compare them arbitrarily by lining

them in up in series. So the two methods I outlined are ways to join the series in ways suitable for regression analysis.

For sake of argument, use the first two columns of the matricies - column 1 representing a timestamp and column 2

representing the price.

X starts at price 24.5 at time 59 (first row) and does not change until it changes to price 21.5 at time 1727 (second

row).

In the meantime, price Y changes from 124.5 at time 159 (first row) to 121.5 at time 1227 (second row).

So at this point, nm should have two rows:

159, 24.5, 25.5, 26.5, 4, 124.5, 125.5, 126.5;

1227, 24.5, 25.5, 26.5, 4, 121.5, 122.5, 123.5;

Column 1 is the timestamp from matrix y.

Columns 2 - 5 are the values from matrix x (note the value is the same in both rows because the value did not change

between time 159 and 1227).

Columns 6 - 8 are the values from matrix y (note the values differ in each row because the y values change at time 159

and 1227).

Y does not change again until time 1452 to price 122.

So Y changes three total times.

While Y is changing from time 159, x is not changing.

So if we were to put time times in order (column 1 of both matricies), the times would be:

59 from x < the x value from this timestamp persists at each y value change below until at least the next x change at

time 1840

159 from y

1227 from y

1340 from y

1452 from y

1840 from x

2252 from x

2445 from x

2945 from y

The only time we record a price is when one or the other change from the previous value.

142.

on 22 Sep 2010 at 7:58 am 143Zane Montgomery

I’ll check that out and edit this post if/when i get a chance, but in the meantime, you can post on the MATLAB Central

(http://www.mathworks.com/matlabcentral/newsreader/) forums where magnitudes more people will view your

143.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

37 of 45 3/25/2011 1:43 AM

question

on 24 Sep 2010 at 8:27 am 144Jason

Ha ha I did and got no response… I’ve come to a workable solution altering the program elsewhere, thanks for the

response…

144.

on 25 Sep 2010 at 6:03 am 145Fess I.

Hi, I have been trying to selectively pick a row from a matrix dimension of 4,5 using the index. Here d = rand(4,5); %randomly generate 4-by-5 matrixindx = round((size(d)-1)*rand(1,1)+); % finding indices of the matrix % Here am trying to randomly obtain any row from the matrixfor i = 1:size(d) indxr = d(indx(i),:);endBut, I got this error message: ??? Attempted to access d(5,:); index out of bounds because size( Then, I used this for loop below, but it does obtain a row from the matrix, but it is same row every time for i = 1:size(d) indxr = d(indx(i),:);end Do you have any solution or idea on how I can get it to work. The basic idea is to randomly select

145.

on 27 Sep 2010 at 2:57 am 146Shaps

hi..

This is SHAPS..

I hav a array of strings stored in a variable ‘A’ within a if loop.. this variable is getting overwritten everytime.. I want it

to be stored seperately.. I mean first time when it enters the if loop it shd be stored in A0 next tym when it enters it shd

be in A1 and so on.. how can i do it?

can you pls help..

146.

on 27 Sep 2010 at 2:59 am 147Shaps

hi.. this is shaps.. i hav a array of strings stored in a variable ‘A’ within a if loop.. this variable is getting overwritten

evytime.. i want the value of ‘A’ to be stored during each iteration of if loop in the form of A0,A1,A2.. i mean A0

should hav first set of data then A2 next set of data.. how can i do it.. can you pls help..

147.

on 27 Sep 2010 at 3:44 am 148Shaps

hi..

This is shaps..

I hav a array of strings stored in a variable ‘A’ within a if loop.. this variable is getting overwritten everytime.. I want it

to be stored seperately.. Like during the first iteration the values shd be stored in A0 and next iteration it should be in

A1 and so on.. How can i do it? can you pls help me..

148.

on 29 Sep 2010 at 5:56 am 149Mukil

Hi,

I have a doubt.

How to replace alternate elements of a row vector with some value. Please help me.

for eg [1 2 3 4] should become [1 0 3 0]

Thank you.

Mukil

149.

on 06 Oct 2010 at 9:42 am 150Trey

You are awesome.

150.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

38 of 45 3/25/2011 1:43 AM

on 26 Oct 2010 at 1:51 am 151Christopher Alain Jones

great post all round!

very helpful especially the interesting debates

151.

on 08 Nov 2010 at 1:06 pm 152Jacob

I need to make the matrix:

[1 3 5 7; 2 6 10 14; 3 9 15 21]

Is there a shortcut for this?

152.

on 18 Nov 2010 at 12:18 pm 153luke

Jacob,

Your matrix is composed of multiples of first row (or column). Suppose that the first column is c (given), then your

matrix is:

A=c*(1:numel(c));

If first row is given (say r), then:

A=(1:numel(r)).'*r;

153.

on 13 Dec 2010 at 10:30 am 154basu

how to display the maximum and minimum group elements in a duplicate vector using matlab code

if the element present in the max group display corresponding max group elements

and

if the element present in the min group display corresponding min group elements

how?Help me

154.

on 14 Dec 2010 at 2:41 pm 155Kajal

Hello All,

I have an algorithm that finds out the best features in a matrix and gives out the output as the indices of the input data

that were selected as best features.

The input is a 16*1368 matrix and the output is a 500*1 matrix.

I want to compare the indices obtained as the output to the input indices and if they match I want to copy the rest of

the row in a separate matrix.

For example:

Input

Col 1 2 3 4…………………

A=[ 100 20 3 4 5 6 7 8---->row1

9 10 11 12 13 14 15 16----->row 2

24 67 21 38 42 53 54 90]—> row 3

Output: [1 2]—> column indices

Now I want a matrix C such that C= [100 9 24

20 10 67]

Please help me out !

Thanks and regards,

155.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

39 of 45 3/25/2011 1:43 AM

Kajal

on 22 Dec 2010 at 10:32 am 156Zane Montgomery

Kajal,

I’m going to assume you only need help making matrix C and you know how to build your input/output matrices?

In the code, I have some A (input) and B (output) matrices already populated which hopefully you can do already. B

contains the arbitrary number of indices in ‘A’ you want to put into C.

A=[ 100 20 3 4 5 6 7 8; 9:16; 24 67 21 38 42 53 54 90];B=[1 2]; C=[]; %generate C as an empty matrix for n=1:length(B) C=[C; A(:,B(n))']; %Add a new row to C using the column of A defined by index Bend C %prints out C

Should work! good luck.

-Zane

156.

on 12 Jan 2011 at 1:37 pm 157Wolfhantich

hello everybody, I have to do this I need to add value 3 to all odd values of vector x.

how can I do that?

thx

157.

on 20 Jan 2011 at 12:49 pm 158iaj4

Hi all, I do have a vector with real data that was colected every 5 minutes. i want to have a matrix with data every one

minute. initial matrix A=[1 2 3]; what I want is B=[1 1 1 1 1 2 2 2 2 2 3 3 3 3 3].

Any advice on how to do it?

thanks!

158.

on 22 Jan 2011 at 6:26 am 159jay

Hi

I have a vector with both +ve and -ve values and the index vector. Both are taken from a large vector. While sorting

the vector again according to -ve to positive I would like to keep track of the index also and arrange it

accordingly..Please let me know

thanks

159.

on 24 Jan 2011 at 7:24 am 160Leandro

Hi…

I have two vectors. For example:

x1 = [0.6154 0.7919 0.9218 0.7382 0.1763];

x2 = [0.4057 0.9355 0.9169 0.4103 0.8936];

How I can do

x3 = [0.6154 0.4057 0.7919 0.9355 0.9218 0.9169 0.7382 0.4103 0.1763 0.8936]? I don’t want to use ‘for’…

Thanks.

160.

on 03 Feb 2011 at 9:05 am 161Felix

hi,

i have a 3D Matrix such as

161.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

40 of 45 3/25/2011 1:43 AM

QQ=cat(3,w,q)

QQ(:,:,1) =

1 2

3 4

QQ(:,:,2) =

5 6

7 8

now i want to use

[r c]=find(QQ,8)

to find my position for point 8. ‘find’ just works for 2D arrays . is there is possibility for 3D arrays?

on 05 Feb 2011 at 11:01 am 162Anonymous

@anuj on 12 Mar 2008 at 3:06 am 10

QUESTION

How can I remove rows in a matrix that have third element in the column 0

Input-

1 2 3

2 3 0

0 2 3

0 2 0

Answer should be-

1 2 3

0 2 3

ANSWER

&gt;&gt; c=[1 2 3;2 3 0;0 2 3;0 2 0] c = 1 2 3 2 3 0 0 2 3 0 2 0 &gt;&gt; z=find(c(:,3)==0) z = 2 4 &gt;&gt; c(z',:)=[] c = 1 2 3 0 2 3

Answered this question by reading this page alone.. Thanks for the post..

New Comer to this page.

162.

on 05 Feb 2011 at 11:02 am 163Anonymous163.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

41 of 45 3/25/2011 1:43 AM

>> c=[1 2 3;2 3 0;0 2 3;0 2 0]

c =

1 2 3

2 3 0

0 2 3

0 2 0

>> z=find(c(:,3)==0)

z =

2

4

>> c(z’,:)=[]

c =

1 2 3

0 2 3

on 06 Feb 2011 at 1:37 pm 164vijay

hi,

I am trying to implement linear convolution by my own, as a part of class project.

my query is

let

a=[1 2 3; 4 5 6;7 8 9]

I wish to display only the second row. i.e 4 5 6.

So, what command should i use?

164.

on 06 Feb 2011 at 1:39 pm 165vijay

hi,

I am trying to implement linear convolution by my own, as a part of class project.

my query is

let

a=[1 2 3; 4 5 6;7 8 9]

a(6), displays the element of 6, but I would like to know , how to make it display the entire row/column .I wish to

display only the second row. i.e 4 5 6.

So, what command should i use?

165.

on 07 Feb 2011 at 8:21 pm 166vijay

the command to be used is a(2,:)

166.

on 08 Feb 2011 at 11:03 am 167Ted

I’ve been trying to delete all the columns of a HUGE matrix that contains all zeros:

info:

my matrix size is (60,4000000) which is pre-allocated

167.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

42 of 45 3/25/2011 1:43 AM

example:

i have data on the 2500000 and below…after the 2500000th column - i only have zeros.

question:

how do i get rid of all the columns from 2500000 - 4000000 without getting the “out of memory” error.

tried:

matirx(:,2500001:end)=[];

newmatrix=matrix(:,1:2500000);

i can’t even copy the old matrix with a new one without getting the “out of memory error”. Please help, thanks!

on 21 Feb 2011 at 2:34 am 168chitra

hi,

i need a matlab code which can store pixel values in a register or a 1D array.

and

i need code for converting m*m matrix to m*1 row matrix

168.

on 22 Feb 2011 at 7:57 am 169Colm

how do i change all the 0’s in a matrix to the value 1.

thx

colm

169.

on 25 Feb 2011 at 5:23 am 170Ashutosh Gupta

Hi All,

i have a matrix

A=[70, 71, 72, 73, 73, 74, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80,

80, 81, 81

81, 81, 81, 81, 81]

i have to find the frequency of repeated elements as well as distinct element list like

b = 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81 // array of distinct elements

freq = 1, 1, 1, 2, 1, 4, 3, 3, 4, 7, 4, 7 // frequency of each distinct element

please help me to do this task

170.

on 27 Feb 2011 at 4:11 pm 171mansur

Dear all,

do you have any idea how could I accumulate every three member of an array and save it t o another array:

Lets assume:

A=[1;2;3;4;5;6;7;8;9]

I would like to have this matrix:

B=[1+2+3;4+5+6;7+8+9]

Thanks

171.

on 28 Feb 2011 at 2:31 am 172mansur

The answer:

B= kron(speye(3),ones(1,3))*A;

172.

on 01 Mar 2011 at 3:17 pm 173Liz173.

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

43 of 45 3/25/2011 1:43 AM

Hi there!

Is there a function that would enable me to find the proportion of values in an array that are above or below a certain

value?

Thanks, Liz

on 15 Mar 2011 at 1:23 am 174Mar

Hi all,

I got this problem:

How do I repack the one column vector(with 200 elements) into 50 column vectors with 4 elements each? Also, I need

to have those new vectors as a part of one matrix.

Thank you.

174.

on 17 Mar 2011 at 5:04 am 175kyrzi

dear all,

i want to make a 6×6 matrix with 0s and 1s.

but i want a specific number of 0s (and 1s).

for example, all arrays must have 4 zeros and 2 ones.

Any help would be greatly appreciated.

175.

Leave a Reply

Include MATLAB code in your comment by doing the following:

<pre lang="MATLAB">

%insert code here

</pre>

Name

Mail (hidden)

Website

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

44 of 45 3/25/2011 1:43 AM

Links

The MathWorks Blog Ring

Undocumented MATLAB Tips

Data Mining in MATLAB

I want an iPad

Search for:

Recent Posts

The End of Blinkdagger? . . . . Possibly

MATLAB - Global Variables

MMM #34 Winner, Sander Land!!!

Monday Math Madness #34: Crossing a Bridge

MATLAB GUI Tutorial - UITABLE Part 2, How To Access Table Data

Copyright ©2011 blinkdagger

Posts RSS Comments RSS

WordPress Theme designed by David Uliana · XHTML · CSS

Matlab - Array Manipulation and Tricks | blinkdagger http://blinkdagger.com/matlab/matlab-tips-and-tricks-on-manipulating-1-d...

45 of 45 3/25/2011 1:43 AM