How to store output of an array?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
The code works perfectly.
a=[0 200 900 1000 1200 1798 1799 1801 2000 2700 3601]
N = round(max(a)/900);
for k = 1:N
[~, ind(k)] = min(abs(a - 900*k));
end
For more arrays of a, i want to store the corresponding ind value. How can i do it?
example,
a=[0 200 900 1000 1200 1798 1799 1801 2000 2700 3601]
a=[0 1800 2000 2700 3600]
N = round(max(a)/900);
for k = 1:N
[~, ind(k)] = min(abs(a - 900*k));
end
For each array of a, how do i store the corresponding ind values?
0 comentarios
Respuestas (1)
Guillaume
el 13 de Jul. de 2015
Here is a non-loopy version of your original code (I have no idea if it's faster than your code):
N = (1:round(max(a)/900))*900;
[~, ind] = min(abs(bsxfun(@minus, a', N)));
To do the same for several a arrays, first stores all these arrays into a cell array:
allAs = {
[0 200 900 1000 1200 1798 1799 1801 2000 2700 3601];
[0 1800 2000 2700 3600]
};
Then use a loop or cellfun to repeat the above or your code over the cell array:
[~, allInds] = cellfun(@(a) min(abs(bsxfun(@minus, a', (1:round(max(a)/900))*900))), ...
allAs, 'UniformOutput', false)
4 comentarios
Guillaume
el 13 de Jul. de 2015
cellfun is just a simple replacement for a loop that avoids you having to keep track of the numbers of elements and having to predeclare the result array. The equivalent code would be:
allInds = cell(size(allAs));
for iter = 1:numel(allAs)
a = allAs{iter};
[~, allInds{iter}] = min(abs(bsxfun(@minus, a', (1:round(max(a)/900))*900)));
end
Ver también
Categorías
Más información sobre Loops and Conditional Statements 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!