matlab对多个矩阵循环,MATLAB:在不使用循环的情况下提取矩阵的多个部分
有許多方法可以在沒有循環的情況下完成此操作.大多數解決方案涉及將向量x和y擴展為更大的索引矩陣,并且可能使用函數
REPMAT,
BSXFUN或
SUB2IND中的一個或多個.可以在
here找到用于矩陣索引的良好教程.
但是,既然你要求一個優雅的解決方案,這里有一點不尋常.它使用anonymous functions以及函數ARRAYFUN和CAT:
indexFcn = @(r,c) cam1(r:(r+99),c:(c+99));
result = arrayfun(indexFcn,x,y,'UniformOutput',false);
result = cat(3,result{:});
說明:
第一行創建一個匿名函數.這是一個簡單的單行函數,可以在運行時創建,而無需將其放在m文件中.該函數定義了兩個輸入r和c,用于從cam1中提取100×100的子矩陣.變量indexFcn存儲用于調用該函數的function handle.請注意,匿名函數使用的cam1值是靜態的.即使變量cam1中的值發生更改,匿名函數仍會使用創建函數時cam1中的值.
第二行調用ARRAYFUN,它將函數應用于數組的每個元素. ARRAYFUN循環遍歷x和y中的每個條目,將值傳遞給indexFcn.輸出存儲在結果中,這是一個15元素的單元陣列,其中每個單元格包含一個100乘100的矩陣.
第三行使用CAT函數將100×100矩陣連接成100×100×15的矩陣.
總結
以上是生活随笔為你收集整理的matlab对多个矩阵循环,MATLAB:在不使用循环的情况下提取矩阵的多个部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三行代码生成验证码并转换成base64
- 下一篇: iterm2一键登陆服务器(门神权限不用