删除单维度--B=squeeze(A) B = squeeze(A)返回一个与A元素相同,但去掉了全部单维度的数组B。单例维度是指size(A,dim) = 1的任何维度。二维阵列不受squeeze函数的影响;若是A是一个行或列向量或标量(1×1)的值,那么B = A。git
>> y = rand(2,1,3) z = squeeze(y) y(:,:,1) = 0.8147 0.9058 y(:,:,2) = 0.1270 0.9134 y(:,:,3) = 0.6324 0.0975 z = 0.8147 0.1270 0.6324 0.9058 0.9134 0.0975
将下标转换为线性索引github
linearInd = sub2ind(arraySize, dim1Sub, dim2Sub, dim3Sub, ...)数组
linearInd = sub2ind(matrixSize, rowSub, colSub) 为大小是 matrixSize 的矩阵返回与行和列下标 rowSub 和 colSub 等效的线性索引。matrixSize 输入是一个包含 2 个元素的向量,该向量以 * [nRows, nCols] 形式指定矩阵中的行和列数。rowSub 和 colSub 输入是正整数标量或向量,指定矩阵的一个或多个行-列下标对组。函数
linearInd = sub2ind(arraySize, dim1Sub, dim2Sub, dim3Sub, ...) 为大小是 arraySize 的 N 维数组的每一个维度返回与指定的下标等效的线性索引。arraySize 输入是包含 n 个元素的向量,指定数组中的维数。dimNSub 输入是正整数标量或向量,指定矩阵的一个或多个行-列下标。学习
全部下标输入能够是 single、double 或任意整数类型。linearInd 输出始终都为类 double。code
若是须要,sub2ind 假定未指定的后续下标是 1。blog
将三维数组的索引转换为单个线性索引。 建立数组 A,并肯定对应于 (2,1,2) 位置的元素的线性索引。 A = rand(3,4,2); linearInd = sub2ind(size(A),2,1,2) linearInd = 14 检查这两个索引版本是否引用 A 的同一元素。 A(2,1,2) ans = 0.4854 A(14) ans = 0.4854
线性索引的下标索引
[I,J] = ind2sub(siz,IND)
[I1,I2,I3,...,In] = ind2sub(siz,IND)图片
ind2sub 函数肯定与数组的单个索引对应的等效下标值。get
[I,J] = ind2sub(siz,IND) 返回矩阵 I 和 J,其中包含与矩阵 IND(大小为 siz 的矩阵)中的每一个线性索引对应的对等行下标和列下标。siz 是一个包含 ndim(A) 个元素(此示例为 2 个元素)的向量,其中 siz(1) 为行数,siz(2) 为列数。
注意
对于矩阵,[I,J] = ind2sub(size(A),find(A>5)) 与 [I,J] = find(A>5) 返回相同的值。
[I1,I2,I3,...,In] = ind2sub(siz,IND) 返回 n 个下标数组 I1,I2,...,In,其中包含等效于 IND(大小为 siz 的数组)的多维数组下标。siz 是一个指定每一个数组维度大小的 n 元素向量。
IND 输入能够是 single、double 或任意整数类型。输出始终属于 double 类。
具备三个输出的 ind2sub 调用返回 2×2×2 矩阵的预期下标:
[rowsub colsub pagsub] = ind2sub(dims, indices)若是您仅指定两个输出(行和列),ind2sub 仍将返回每一个指定索引的下标,但会从矩阵中删除第三个维度,并改成返回一个二维的 2×4 矩阵的下标:
[rowsub colsub] = ind2sub(dims, indices)
rowsub =
1 2 1 2 1 2 1 2
colsub =
1 1 2 2 3 3 4 4
[rowsub] = ind2sub(dims, indices) rowsub = 1 2 3 4 5 6 7 8