I'm trying to find some way to substract a size 3 vector from each column of a 3*(a big number) matrix in Matlab. Of course I could use a loop, but I'm trying to find some more efficient solution, a bit like numpy broadcasting. Oh, and I can't use repmat because I just don't have enough memory to use it (as it creates yet another 3*(a big number) matrix)...

Is this possible?

Loops aren't bad in MATLAB anymore thanks to compiler optimizations like just-in-time acceleration (JITA). etc. Most of the time, I've noticed that a solution with loops in current MATLAB versions is *much* faster than complicated (albeit, cool :D) one-liners.

`bsxfun`

might do the trick **but** in my experience, it tends to have memory issues as well but less so than `repmat`

.

So the syntax would be:

`AA = bsxfun(@minus,A,b)`

where `b`

is the vector and `A`

is your big matrix

But I urge you to profile the loopy version and then decide! Most probably, due to memory constraints, you might not have a choice :)

The other answers are a bit out of date -- Matlab R2016b appears to have added broadcasting as a standard feature. An example from that blog post that matches the question:

```
>> A = ones(2) + [1 5]'
A =
2 2
6 6
```

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow