How to find subscripts of each element inside many rectangular regions of a matrix?

1 回表示 (過去 30 日間)
JAI PRAKASH
JAI PRAKASH 2018 年 11 月 25 日
回答済み: JAI PRAKASH 2018 年 11 月 25 日
rowStart = [2; 4; 7]; % a column, may be of more than thousand element
rowEnd = [3; 4; 9]; % a column, may be of more than thousand element
colStart = [1; 1; 2]; % a column, may be of more than thousand element
colEnd = [3; 1; 3]; % a column, may be of more than thousand element
% for obvious reason size of all above vectors would be same
function [subRow subCol] = elementwisesubscript(rowStart, rowEnd, colStart, colEnd)
%% interesested function
% I tried 'arrayfun', its working but is slow
% I tried for loop, 1.5x faster than arrayfun. But thinking there could be a smart optimized way
% needed a code, that is matlab coder compatible.
end
Thanks a lot for consideration.
Attached image further examplifies.

回答 (1 件)

JAI PRAKASH
JAI PRAKASH 2018 年 11 月 25 日
This is 10x times than arrayfun, still i think can be optimsed.
Because no pre-allocation in below code and many other potential improvements.
function [subRow, subCol] = elementwisesubscript(rowStart, rowEnd, colStart, colEnd)
%% subRow identification
rowLength = rowEnd-rowStart+1;
maxRowLength = max(rowLength);
subRow = repmat(rowStart, 1, maxRowLength) + repmat(0:maxRowLength-1, length(rowStart),1);
colLength = colEnd-colStart+1;
for i =2:maxRowLength
subRow(rowLength<i, i) = 0;
end
subRow = subRow';
subRow = subRow(:);
subRow = repelem(subRow, repelem(colLength, maxRowLength));
subRow(subRow==0)=[];
%% subCol identification
maxColLength = max(colLength);
subCol = repmat(colStart, 1, maxColLength) + repmat(0:maxColLength-1, length(colStart),1);
for i =2:maxColLength
subCol(colLength<i, i) = 0;
end
subCol = subCol(:);
colLengthMat = repmat(rowLength,1,maxColLength);
colLengthMat = colLengthMat(:);
subCol = repelem(subCol, colLengthMat);
subCol = reshape(subCol, [], maxColLength);
subCol = subCol';
subCol = subCol(:);
subCol(subCol==0)=[];
end

カテゴリ

Help Center および File ExchangeData Import and Management についてさらに検索

タグ

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by