首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MATLAB 矩陣切片:根據已知起始/結束位置提取子數組的高效方法

     編輯:程式設計綜合問答

問題描述

已知數組中起始元素和結束元素的位置及值,需將這兩個位置之間的所有元素提取到新矩陣中。

核心解決方案

MATLAB 支持強大的索引操作,直接使用冒號運算符實現範圍提取:

% 假設原數組
A = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];

% 已知起始位置 3 (值 30),結束位置 7 (值 70)
startIdx = 3;
endIdx = 7;

% 提取子數組(包含邊界)
B = A(startIdx:endIdx);
% 結果: B = [30, 40, 50, 60, 70]

進階場景處理

1. 根據值查找位置再提取

valStart = 30;
valEnd = 70;
startIdx = find(A == valStart, 1, 'first');
endIdx = find(A == valEnd, 1, 'last');
if ~isempty(startIdx) && ~isempty(endIdx)
    B = A(startIdx:endIdx);
end

2. 多維矩陣行/列切片

M = magic(5);  % 5x5 矩陣
% 提取第 2 到 4 行,第 1 到 3 列
subM = M(2:4, 1:3);

3. 邏輯索引提取

% 提取大於 30 且小於 70 的元素
B = A(A > 30 & A < 70);

性能優化建議

  • 避免循環賦值,優先使用向量化索引
  • 大數據量時預分配輸出數組
  • 使用 sub2ind/ind2sub 進行線性/下標索引轉換

常見錯誤避坑

  1. 索引越界:MATLAB 索引從 1 開始,最大為 numel(A)
  2. 空結果處理:find 可能返回空數組,需判斷 isempty
  3. 數據類型不匹配:確保索引為正整數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved