-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmat2slice.m
More file actions
53 lines (45 loc) · 1.74 KB
/
mat2slice.m
File metadata and controls
53 lines (45 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function varargout = mat2slice(M, dim)
% MAT2COL(M, dim) 按指定维度顺序提取矩阵的切片,作为单独的输出变量。
%
% 语法:
% [slice1, slice2, ...] = mat2col(M, dim)
%
% 输入:
% M - 待处理的输入矩阵。
% dim - 指定提取切片的维度:
% dim = 1 (默认): 提取矩阵的 **行** (即 M(i, :))
% dim = 2 : 提取矩阵的 **列** (即 M(:, j))
%
% 输出:
% slice_i - M 的第 i 个切片(行或列)。如果输出变量数量超过切片数,则额外的输出为 []。
% 设置默认值:如果未提供 dim,默认为 2(提取列,与最初的 mat2col行为一致)
if nargin < 2
dim = 2;
end
% 1. 获取用户请求的输出变量数量 (nargout)
numRequestedOutputs = nargout;
% 2. 获取沿指定维度可以切出的切片总数
numSlices = size(M, dim);
% 3. 初始化 varargout 单元格数组
varargout = cell(1, numRequestedOutputs);
% 4. 循环分配输出
for k = 1:numRequestedOutputs
if k <= numSlices
% 构建动态索引
% subref 是一种更通用的索引方法,但为了清晰,我们使用 if/else
if dim == 2
% 提取列 M(:, k)
varargout{k} = M(:, k);
elseif dim == 1
% 提取行 M(k, :)
varargout{k} = M(k, :);
else
% 处理非二维矩阵的维度,或者非法 dim 值
error('MAT2COL:InvalidDimension', 'dim 参数必须为 1 (行) 或 2 (列)。');
end
else
% 如果请求的输出 k 超过切片数,返回空数组 []
varargout{k} = [];
end
end
end