`Matlab has its own memory limits due to which we have to define very large matrices`

`as sparse and use them. But we can not use them exactly the same way as normal matrice`

`due to difference in the way of storage. In my case, I have to define neighborhodd of `

`pixels in an image which is usually of large size(307200 for a 640x480 image!!!). So,`

`the nbrhood matrix (lets call it `**adj**) is now of size 307200x307200, which is huge.

` `

`I posted this in `

`stackoverflow and had a beautiful discussion over the forum.`

` `

`>>`

nNodes = 50400;

```
>>adj = sparse(nNodes,nNodes); %adj is a large sparse matrix with all values as zero.
```

` `

`I want to insert a 1 to adj(i,j) if pixel i and j are adjacent.`

` `

```
>>adj(sub2ind([nNodes nNodes], ind, ind + 1)) = 1; %ind is a vector of indices
??? Maximum variable size allowed by the program is exceeded.
```

` `

`Therefore, it is better to define `**adj **in the following way, where definition

`and updation take place in one shot. `

` `

`>>adj = sparse(ind, ind + 1, ones(size(ind)), nNodes, nNodes, length(ind));`

` `

`Now, how do we access sparse matrix elements?`

` `

`In a general matrix, we can access and modify the elements, `

`either by using 2-dimensional indexing or linear indexing.`

` `

`for example,`

` `

`>> a = [ 1 2 3; 4 5 6]`

a =

1 2 3

4 5 6

>> a(1,2)

ans =

2

>> a(3)

ans =

2

` `

`Similarly,`

```
>> i = find(a == 2)
i =
3
>> [i,j] = find(a == 2)
i =
1
j =
2
But we do not have the luxury to access using linear index
```

`for sparse matrices.`

` `

`If I want to access non-zero elements of sparse matrix, I have to `

`access the following way:`

` `

`>> [i,j] = find(adj); `

```
```

`The elements with higher indices must be accessed with `

`2-dimensional indexing:`

```
```

```
>> adj(nNodes, nNodes)
ans =
0
>> adj(nNodes * nNodes)
??? Maximum variable size allowed by the program is exceeded.
```

` `

`That's it with sparse matrices for the time being. :)`

` `

## No comments:

## Post a Comment