Ka Wa Yip
Ka Wa Yip

Reputation: 2983

Matlab: Create a zero matrix with 1 in a particular place

For example, I can create a zeros(100). But I want the entry of row 58 and column 59 to be 1. But I need temporary variable and multiple lines to do this.

a. Let this matrix be M. How can I do this in one line? M = ....?


P.S.

b. Better still, sometimes I want two or more entries of the zero matrix be 1. Again, how can I do this?

If I can do a. in one-line, of course I can add them up. But is there any special function to do fill zero matrix entries with 1?

Upvotes: 0

Views: 233

Answers (1)

NLindros
NLindros

Reputation: 1693

First, remember that a one line expression isn't always the most effective. It could also be harder to read/understand.

One way to do this is by using a sparse matrix

The following example creates a 10x10 zero-matrix with ones at [5,2] (row 5, col 2) and [7 5]

full(sparse([5 7],[2 5],1,10,10))

Use full to convert it from a sparse matrix to a "full" one


Another (faster but maybe not as intuitive) alternative is to use accumarray

accumarray([5 2;7 5],1,[10,10])

Remember that the index values above is used directly in the expression to get on one line, the better option would be to create them separately

points = [5 2; 7 5]

or perhaps,

rowIdx = [5 7];
colIdx = [2 5];

Upvotes: 7

Related Questions