필터 지우기
필터 지우기

How to store output of an array?

조회 수: 3 (최근 30일)
yashvin
yashvin 2015년 7월 13일
댓글: Guillaume 2015년 7월 13일
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?

답변 (1개)

Guillaume
Guillaume 2015년 7월 13일
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
yashvin
yashvin 2015년 7월 13일
Ah sorry! My bad you are right. Being a beginner, I meant very common apporach, as I have no in depth knowledge of cellfun. I have a feeling that the solution is very simple. So any solution that is less complex than cellfun.
The problem is that ind which is the output of min cannot be specified in terms of cell . Else for each array, i could have stored it as a cell.
Sorry for the misinterpretation
Guillaume
Guillaume 2015년 7월 13일
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

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by