Functional form of the colon (:) operator?
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Knut
el 18 de Sept. de 2012
Comentada: Royi Avital
el 15 de En. de 2019
This is a post about "how to write neat, efficient, readable MATLAB code". I get the job done by doing work-arounds, but I would rather not do those.
Assume that a, b are two vectors of unknown orientation, and we want to compute something similar to the dot-product.
It might look something like this:
function y = myfunc(a,b)
//make sure that vectors are oriented the same way
y = a(:) .* b(:);
But what if I need to calculate y for elements 2:N? We might do something like this, but I think it clutters the code:
function y = myfunc(a,b)
a = a(2:end)
b = b(2:end)
y = a(:) .* b(:);
I am wishing for a functional form of the colon operator that might look something like this:
function y = myfunc(a,b)
y = colon(a(2:end)) .* colon(b(2:end));
0 comentarios
Respuesta aceptada
José-Luis
el 18 de Sept. de 2012
function y = myfunc(a,b)
//make sure that vectors are oriented the same way
y = reshape(a(2:end),[],1) .* reshape(b(2:end),[],1);
1 comentario
Más respuestas (3)
Daniel Shub
el 18 de Sept. de 2012
I thought that squeeze would do what you want, but apparently it doesn't "work" on row vectors. What would be nice is if squeeze had a row flag. Barring that, you can easily create your own colon function. From
type squeeze
it should be obvious what you need to change.
0 comentarios
Royi Avital
el 10 de Oct. de 2017
I really wish MATLAB would add function to vectorize arrays into column vector as the colon operator does.
3 comentarios
Jan
el 10 de Oct. de 2017
What's wrong with:
y = x(:)
or:
reshape(x, [], 1)
There is a functional form of the x(:) operator:
subsref(x, struct('type', '()', 'subs', {{':'}}))
1 comentario
Walter Roberson
el 17 de Oct. de 2018
Sometimes it is easiest to define an auxillary function, such as
column = @(M) M(:);
after which you can
column(a(2:end)) .* column(b(2:end))
Ver también
Categorías
Más información sobre Performance Profiling en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!