numpy和matlab的多维数组展平:ravel, flatten, reshape, (:)
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 28 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, (:)相关推荐
- matlab求向量空间的基,线性空间维数与基的求法.doc
线性空间维数与基的求法,求子空间的基和维数,线性空间的维数,线性空间维数,向量空间的基与维数,什么叫线性的维数和秩,matlab求矩阵的维数,matlab求矩阵维数,基和维数,cao法求嵌入维数 线性 ...
- js嵌套数组展平和判断数组方法
判断数组方法 1. instanceof function isArray(arr) {return arr instanceof Array } instanceof 只能用来判断两个对象是否属于实 ...
- python二维数组变成三维数组_Python reshape的用法及多个二维数组合并为三维数组的实例...
reshape(shape) : 不改变数组元素,返回一个shape形状的数组,原数组不变.是对每行元素进行处理 resize(shape) : 与.reshape()功能一致,但修改原数组 In [ ...
- matlab盒子分形维数_分形:盒子维数
今天主要想说的是,分形中的差分盒子维数的原理,基于分形的基础概念就不在这里说啦. 分形维数可以用于定量描述图像表面的空间复杂程度,能够定量的表现图像的纹理特征. 采用不同的维数进行纹理特征描述时,精度 ...
- 【Numpy】改变数组维数
文章目录 前言 1. atleast_1d.atleast_2d.atleast_3d 2. broadcast 3. broadcast_to 4. broadcast_arrays 5. expa ...
- matlab中维数的理解
a = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 就上面这样一个矩阵而言,它有3行5列 第一维:行维,即行向,也即垂直方向,维数为3,就矩阵a而言 第二维:列维,即列向,也即水平方向 ...
- 相空间重构 matlab 程序源,matlab求相空间重构延迟时间和嵌入维数
关联积分计算 function C_I=correlation_integral(X,M,r) %该函数用来计算关联积分 %C_I:关联积分的返回值 %X:重构的相空间矢量,是一个m*M的矩阵 %M: ...
- matlab中chrom的意思,怎样解决遗传算法中Chrom和FitnV的维数不一致问题
本人小白一枚,刚开始接触遗传算法,套用别人的代码,出现一下错误:Error using select (line 35)Chrom and FitnV disagree Error in main ( ...
- matlab为什么要升维数,基于MATLAB和升维投影法的手写字符识别输入系统
256 现代交际·2019年6期 作者简介:王思达,长春师范大学学生,研究方向:计算机科学与技术:刘勇,长春师范大学学生,研究方向:计算机科学与技术:袁汇灵, 长春师范大学学生,研究方向:计算机科学与 ...
最新文章
- linux撤销以硬件时钟作为UTC,linux时钟基本概念、CST与UTC、以及NTP简单设置
- 使用input做简单的上传图片
- C++编程语言之Lambda函数与表达式
- c语言筛选法_极少数人用过的另类素数求解法,C语言经典算法之筛选法求质数...
- Eclipse分栏显示同一个代码文件的设置
- javase阶段总结脑图
- 信息收集——Office钓鱼
- 高级 Linux 命令精通指南(2)
- dataframe常用操作总结
- 浅谈spring--AOP与IOC / DI
- [转]bss,data,rodata,text
- C++string字符串1.2
- PHP 抽象工厂模式(Kit模式)
- Python数据分析中的训练集、验证集、测试集
- PLC基础——1.自保持回路
- android如何修改视频的分辨率,Android录制视频,视频压缩,设置分辨率,设置视频名称...
- tinymce上传图片php,图片文件上传
- 浮点型数据单片机传输
- 波士顿房价预测python决策树_波士顿房价预测 - 最简单入门机器学习 - Jupyter
- 三分钟告诉你软件测试工程师到底是不是程序员?读完你就懂了!