专栏首页人工智能与演化计算成长与进阶一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind

一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind

本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一些负面消息对国内各个高校和业界影响很大。但是我们作为技术人员,更是要奋发努力,拼搏上进,学好技术,才能师夷长技以制夷,为中华之崛起而读书!

本文很多摘录自图书资料,不做任何商业用途,仅做技术分享,侵权删除!请不要放弃自己的理想和道路,加油!!

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

本文分享自微信公众号 - DrawSky(wustcsken),作者:CloudXu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一起来学matlab-matlab学习笔记10 10_1一般运算符

    本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一...

    DrawSky
  • matlab sort函数

    DrawSky
  • 机器学习数学笔记|极大似然估计

    课程传送门: http://www.julyedu.com/video/play/38

    DrawSky
  • 基于消失点的相机自标定(1)

    标题:Camera calibration using two or three vanishing points

    点云PCL博主
  • Spring-IOC-创建Bean-属性填充

    在Spring 创建 bean 的流程中,Spring 先通过反射创建一个原始的 bean 对象,然后再向这个原始的 bean 对象中填充属性。对于填充属性这个...

    程序员酷森
  • 谷歌能打电话预订餐厅的AI,苹果手机也马上也可以用了

    去年的Google I/O大会上,有一个炸裂的产品展示。它的名字是:Duplex!

    量子位
  • 手写中间件之——并行框架(3 异步回调如何实现)

    上一篇主要讲了任务的编排该如何实现,包括串、并、串并结合。建议一定要手写个小demo去尝试各种基本组合。

    天涯泪小武
  • php成功操作redis cluster集群的实例教程

    1、使用phpredis扩展,这是个c扩展,性能更高,但是phpredis2.x扩展不行,需升级phpredis到3.0,但这个方案参考资料很少

    砸漏
  • 【Rust日报】2020-05-16 Rust 的自动向量化

    在 Rust 代码使用 SIMD CPU 指令优化,学习如何快速检查编译器的汇编程序输出,以及修改 Rust 代码以生成更快程序的方法。其中 SIMD 是单指令...

    MikeLoveRust
  • Linux常用命令2(升级版)

    在Linux系统中, 不论是由本级或是远程登录系统, 每个系统都必须拥有一个账号, 并且对于不同的系统资源拥有不同的使用权限。 对文件/目...

    公众号-猿人菌

扫码关注云+社区

领取腾讯云代金券