zoukankan      html  css  js  c++  java
  • matlab学习笔记11_2高维数组操作 squeeze,ind2sub, sub2ind

    一起来学matlab-matlab学习笔记11

    11_2 高维数组处理和运算

    squeeze, ind2sub, sub2ind

    觉得有用的话,欢迎一起讨论相互学习~Follow Me

    squeeze

    • 删除单维度--B=squeeze(A) B = squeeze(A)返回一个与A元素相同,但去掉了所有单维度的数组B。单例维度是指size(A,dim) = 1的任何维度。二维阵列不受squeeze函数的影响;如果A是一个行或列向量或标量(1×1)的值,那么B = A。

    从数组中去掉单维度

    • 创建一个(213)的数组,然后去掉单维度,使其成为一个(2*3)的矩阵
    
    >> 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
    

    sub2ind

    • 将下标转换为线性索引

    语法

    • linearInd = sub2ind(matrixSize, rowSub, colSub)
    • 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。

    • 如果需要,sub2ind 假定未指定的后续下标是 1。

    三维数组的线性索引

    将三维数组的索引转换为单个线性索引。
    
    创建数组 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
    

    ind2sub

    • 线性索引的下标

    语法

    [I,J] = ind2sub(siz,IND)
    [I1,I2,I3,...,In] = ind2sub(siz,IND)

    说明

    ind2sub 函数确定与数组的单个索引对应的等效下标值。

    [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 类。

    二维矩阵

    在这里插入图片描述

    三维矩阵

    在这里插入图片描述

    降维输出

    • 对 N 维矩阵调用 ind2sub 时,通常应在调用中提供 N 个输出参数:矩阵的每个维度一个参数。此示例显示在对某个三维矩阵调用 ind2sub 时返回三个、两个和一个输出时发生的情况。

    • 该矩阵为 2×2×2 矩阵,并且线性索引从 1 到 8:

      • dims = [2 2 2];
      • indices = [1 2 3 4 5 6 7 8];
    • 具有三个输出的 ind2sub 调用返回 2×2×2 矩阵的预期下标:

      [rowsub colsub pagsub] = ind2sub(dims, indices)
      rowsub =
      1 2 1 2 1 2 1 2
      colsub =
      1 1 2 2 1 1 2 2
      pagsub =
      1 1 1 1 2 2 2 2
      在这里插入图片描述

    • 如果您仅指定两个输出(行和列),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
    在这里插入图片描述

    • 如果您指定一个输出(行),ind2sub 将从矩阵中删除第二个维度和第三个维度,并改为返回一个一维的 1×8 矩阵的下标:

    [rowsub] = ind2sub(dims, indices)
    rowsub =
    1 2 3 4 5 6 7 8

  • 相关阅读:
    全民学python(01)
    如何从标准输入读入数据(2) -- c++语言
    如何从标准输入读入数据(1) -- java语言
    测试markdown格式
    java入门(6)--面向对象初探
    java入门(5)--数组
    java入门(4)--流程控制
    java入门(3)--函数
    java入门(2)--数据类型
    java入门(1)--介绍
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/11758262.html
Copyright © 2011-2022 走看看