1. matlab的矩阵展平

matlab的数组展平有两种基本方法,一种是用a(:);另一种是用reshape()函数。代码示例如下:

clear, close all, clca = magic(3);
disp(a);
b = a(:);
disp(b');disp(reshape(a,[],1)'); % matlab会自动计算缺失的参数
disp(reshape(a,1,[])); % matlab会自动计算缺失的参数fprintf(1,'a(:) size is (%d,%d)\n',size(a(:)));fprintf(1,"1's size is (%d,%d)\n",size(1));

运行结果如下:

8     1     6
     3     5     7
     4     9     2

8     3     4     1     5     9     6     7     2

8     3     4     1     5     9     6     7     2

8     3     4     1     5     9     6     7     2

a(:) size is (9,1)

1's size is (1,1)

要点:

(1) matlab是按列优先进行展平。matlab中是以列作为第1维,行作为第2维,将矩阵展平时,

先把第一列取出来,然后取第二列排在第一列后面,然后以此类推。。。

(2) matlab本质上把所有标量、向量和矩阵都是当作矩阵(2维数组来看待)。比如说以上代码中即便常数1的size也是(1,1)。所以即便将矩阵展平了其实得到的还是一个矩阵,只是矩阵的两个维度方向的长度发生的变化。这点与numpy中的张量的处理是不同的,如下面所述。

matlab中如何处理2维以上的数组呢?待补充。

2. numpy flatten(), ravel(), reshape()

numpy中对于多维数组的处理要比matlab中的矩阵处理要更为灵活(其中原因可能是matlab一开始就是面向矩阵运算开发的,更高维数组的处理是后来扩充的,不是原生的高维数组处理方式;而numpy自一开始就是面向通用的张量处理而开发的,是原生的处理方式)。

numpy中将多维数组进行展平可以使用flatten()函数或者ravel()函数,也可以用与matlab同名的reshape()函数,代码示例如下:

import numpy as np
##对二维数组进行reval
a=np.reshape([k for k in range(10)], (5,2))  #创建2*2数组
print("二维数组a:", a)
print("np.reshape(a,(1,10)) = ", np.reshape(a,(1,10))) # 仍然得到2维的矩阵
print("np.reshape(a,(10,)) = ", np.reshape(a,(10,))) # 得到1维的向量print("a.ravel() = ", a.ravel()) # 得到1维的向量
print("a.flatten() = ", a.flatten()) # 得到1维的向量##对三维数组进行reval
c=np.empty((2,3,4),dtype=int)  #创建2*3*4数组 (两页三行四列)
print("三维数组c:\n", c)d=np.ravel(c)
print("对c进行reval操作后:\n",d)

运行结果如下所示:

二维数组a: [[0 1][2 3][4 5][6 7][8 9]]
np.reshape(a,(1,10)) =  [[0 1 2 3 4 5 6 7 8 9]]
np.reshape(a,(10,)) =  [0 1 2 3 4 5 6 7 8 9]
a.ravel() =  [0 1 2 3 4 5 6 7 8 9]
a.flatten() =  [0 1 2 3 4 5 6 7 8 9]
三维数组c:[[[-1045352360         640          49           0][          0           0           0           0][          0     7209071  1852990827  1630432357]][[ 1714764086   758396724  1698063458   876164141][  859319653  1663906615   875640624  1633826099][  775250739  1869771365         114     7471204]]]
对c进行reval操作后:[-1045352360         640          49           0           0           00           0           0     7209071  1852990827  16304323571714764086   758396724  1698063458   876164141   859319653  1663906615875640624  1633826099   775250739  1869771365         114     7471204]

要点:

(1) numpy的ravel()和flatten()将任意高维数组都展平为1维数组(更加符合展平的自然含义)

(2) numpy.reshape()与matlab.reshape()的功能相同,都是任意改变数组形状。因此也可以用它实现ravel()和flatten()的功能

(3) numpy中对多维数组的展平是由内而外的。即先展平内层,然后向外延申。numpy中的高维数组中每个维度方向称为轴(axis),第0个轴为最外层的轴,轴的序号由外到内从低到高。多维数组可以看作是一个递归的过程。以以上代码中3维数组(更标准的说法是3阶张量)的展开为例:先展开c[0],然后展开c[1],连接c[0]的展开和c[1]的展开得到c的展开;然后,c[0]和c[1](均为2阶张量,2为数组)的展开同理,比如说,c[0]的展开是c[0][0]、c[0][1]、c[0][2]的展开按顺序连接构成。

注意,numpy中多维数组的元素的引用既可以用c[0][0]的形式也可以用c[0,0]的形式,如下所示:

print(c[0])
print(c[0][0], c[0,0])
[[-1045352360         640          49           0][          0           0           0           0][          0     7209071  1852990827  1630432357]]
[-1045352360         640          49           0] [-1045352360         640          49           0]

numpy和matlab的多维数组展平:ravel, flatten, reshape, (:)相关推荐

  1. matlab求向量空间的基,线性空间维数与基的求法.doc

    线性空间维数与基的求法,求子空间的基和维数,线性空间的维数,线性空间维数,向量空间的基与维数,什么叫线性的维数和秩,matlab求矩阵的维数,matlab求矩阵维数,基和维数,cao法求嵌入维数 线性 ...

  2. js嵌套数组展平和判断数组方法

    判断数组方法 1. instanceof function isArray(arr) {return arr instanceof Array } instanceof 只能用来判断两个对象是否属于实 ...

  3. python二维数组变成三维数组_Python reshape的用法及多个二维数组合并为三维数组的实例...

    reshape(shape) : 不改变数组元素,返回一个shape形状的数组,原数组不变.是对每行元素进行处理 resize(shape) : 与.reshape()功能一致,但修改原数组 In [ ...

  4. matlab盒子分形维数_分形:盒子维数

    今天主要想说的是,分形中的差分盒子维数的原理,基于分形的基础概念就不在这里说啦. 分形维数可以用于定量描述图像表面的空间复杂程度,能够定量的表现图像的纹理特征. 采用不同的维数进行纹理特征描述时,精度 ...

  5. 【Numpy】改变数组维数

    文章目录 前言 1. atleast_1d.atleast_2d.atleast_3d 2. broadcast 3. broadcast_to 4. broadcast_arrays 5. expa ...

  6. matlab中维数的理解

    a = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 就上面这样一个矩阵而言,它有3行5列 第一维:行维,即行向,也即垂直方向,维数为3,就矩阵a而言 第二维:列维,即列向,也即水平方向 ...

  7. 相空间重构 matlab 程序源,matlab求相空间重构延迟时间和嵌入维数

    关联积分计算 function C_I=correlation_integral(X,M,r) %该函数用来计算关联积分 %C_I:关联积分的返回值 %X:重构的相空间矢量,是一个m*M的矩阵 %M: ...

  8. matlab中chrom的意思,怎样解决遗传算法中Chrom和FitnV的维数不一致问题

    本人小白一枚,刚开始接触遗传算法,套用别人的代码,出现一下错误:Error using select (line 35)Chrom and FitnV disagree Error in main ( ...

  9. matlab为什么要升维数,基于MATLAB和升维投影法的手写字符识别输入系统

    256 现代交际·2019年6期 作者简介:王思达,长春师范大学学生,研究方向:计算机科学与技术:刘勇,长春师范大学学生,研究方向:计算机科学与技术:袁汇灵, 长春师范大学学生,研究方向:计算机科学与 ...

最新文章

  1. linux撤销以硬件时钟作为UTC,linux时钟基本概念、CST与UTC、以及NTP简单设置
  2. 使用input做简单的上传图片
  3. C++编程语言之Lambda函数与表达式
  4. c语言筛选法_极少数人用过的另类素数求解法,C语言经典算法之筛选法求质数...
  5. Eclipse分栏显示同一个代码文件的设置
  6. javase阶段总结脑图
  7. 信息收集——Office钓鱼
  8. 高级 Linux 命令精通指南(2)
  9. dataframe常用操作总结
  10. 浅谈spring--AOP与IOC / DI
  11. [转]bss,data,rodata,text
  12. C++string字符串1.2
  13. PHP 抽象工厂模式(Kit模式)
  14. Python数据分析中的训练集、验证集、测试集
  15. PLC基础——1.自保持回路
  16. android如何修改视频的分辨率,Android录制视频,视频压缩,设置分辨率,设置视频名称...
  17. tinymce上传图片php,图片文件上传
  18. 浮点型数据单片机传输
  19. 波士顿房价预测python决策树_波士顿房价预测 - 最简单入门机器学习 - Jupyter
  20. 三分钟告诉你软件测试工程师到底是不是程序员?读完你就懂了!

热门文章

  1. “理想男友职业”排行榜,高薪程序员输给了三大铁饭碗?原因现实
  2. Win10系统不能显示移动硬盘盘符怎么解决?
  3. 读人工智能发展报告学习心得(大纲)
  4. 大学四年学习路线(以下纯属个人意见)适合上大学的人看
  5. 2022年 软件工程专业 计算机组成原理 运算器实验报告
  6. 485远传水表抄表系统
  7. C++ | Qt 常用头文件及容器类
  8. 程序员是否需要具备抽象思维?
  9. Sampled Softmax
  10. mysql 结果字段截取_mysql字段截取(转)