Matlab和Python的对比学习(二) 之 数组矩阵

本文对Matlab和Python的数组矩阵进行对比学习。介绍了Python数组、矩阵、列表的创建,获取其属性的函数与方式,如len、size、shape等。对比了Matlab和Python中reshape函数的用法,还提及两者数据存储方式不同,Matlab优先列存储,Python优先行存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python的数组、矩阵、列表创建

总的来说,就是不能像matlab那样直接创建数组(一维矩阵、向量):[1,2],这样的结果是列表。

1.数组是Python扩展库Numpy中的一种数据结构ndarray;矩阵是同样是Python扩展库Numpy中的一种数据结构mat;列表可以存储数组和矩阵。

MatlabPython备注
[  ] 中输入创建矩阵,使用空格或逗号分隔列元素,分号分隔行元素[  ] 创建列表,逗号分隔的不同的数据项python这边主要用np.array创建数组,替代matlab的矩阵

{ }创建元胞数组

{ }创建字典,每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号,分割
( )在matlab中一般不创建什么,用来索引()创建元组

获取它们属性的函数与方式

2.同时我们常常需要查看列表、数组和矩阵的属性,如size、shape、len

其中len():返回对象的长度,可以作用于列表、数组和矩阵:len(list([1,2,3]))

size()和shape()是Numpy扩展库中才用的函数:

size():计算所有数据的个数,同样可以作用于列表、数组和矩阵:np.size(np.array([1,2,3])),Matlab里是numel

shape():得到数据每维的大小,同样可以作用于列表、数组和矩阵:np.shape(np.array([1,2,3])),Matlab里是size

不同于len,shape和size还可以作为数组和矩阵的属性(列表不行),使用方法如下:a.shape、a.size

更详细的可以参考:
(60条消息) Python3中的列表、数组和矩阵及*、np.dot和np.multiply解析_等等登登-Ande的博客-CSDN博客

(60条消息) Python 与 Matlab 矩阵操作对应表_SongpingWang的博客-CSDN博客

(60条消息) matlab和python运算对比_hi_cwy的博客-CSDN博客

(60条消息) python的列表,数组和矩阵_py中列表和矩阵的存储方式_johnjim0816的博客-CSDN博客

(60条消息) python数组和矩阵用法_wxyld的博客-CSDN博客

Matlab和Python中reshape函数的对比 

3.记录下matlab中的reshape函数和python中的reshape函数

首先是python中的reshape

例子1:很正常的reshape,reshape还可以多维,不止二维

>>> c=np.array([[2,3,4],[5,6,7]])
>>> c
array([[2, 3, 4],
       [5, 6, 7]])
       
>>> c=c.reshape(3,2)
>>> c
array([[2, 3],
       [4, 5],
       [6, 7]])


例子2:

>>> import numpy as np
>>> import pandas as pd
>>> c=np.array([[2,3,4],[5,6,7]])
>>> c=c.reshape(2,-2) ##这里的-2是模糊控制,这里的负数是模糊控制,负数可以为任何数。比如 reshape(2,-1),固定两行,多少列系统根据元素数量自动计算好;同理,reshape(-2,2): 固定两列,行数自动计算好。
>>> c
array([[2, 3, 4],
       [5, 6, 7]])

当然还可以这样调用:第二种:np.reshape(a, 矩阵维度数,矩阵行数,矩阵列数)

另外!!关于python的这个函数如何取数排列:
y=a.reshape(3,2,order='C')#C按行取数按行放数
y=a.reshape(3,2,order='F')#F按列取数按列放数
 

matlab reshape() 函数

语法是 A = reshape(A,m,n); 或者 A = reshape(A,[m,n]); 都是将A 的行列排列成m行n列。reshape是 按照列取数据

另外类似python的-1模糊功能有:只用[]来自动计算

例子:

为第一个维度指定 [] 以使 reshape 自动计算合适的行数。

A = magic(4)
B = reshape(A,[],2)%将一个 4×4 方阵重构为一个 2 列矩阵

 Python 和 MATLAB的数据存储方式

例如:
序列 A = [1,2,3,4],用Matlab 和 Python 分别reshape为2*2大小:
Matlab中 reshape(A, [2 2]), 得到 [[1 3] [2 4]] —— 优先列存储
Python中 A.reshape(2,2),    得到[[1 2] [3 4]] —— 优先行存储

 所以假如A是一个图片的数据一维向量,那么在两个软件中塑形得到的二维图像是不一样的,需要转置等操作!

详细操作对应表

MatlabPython
zeros(m, n)np.zeros((m, n))创建0矩阵
ones(m, n)np.ones((m, n))创建1矩阵
eye(n)np.identity(n)单位矩阵
diag(vector)np.diag(vector)创建对角矩阵
rand(m, n)np.random.random((m, n))能生成在区间 [0, 1) 内均匀分布的随机数

randn

该函数可生成均值为 0、标准差为 1 的标准正态分布随机数
randi生成指定区间内的整数随机数
A’np.transpose(A)转置
inv(A)np.linalg.inv(A)
trace(A)np.trace(A)求迹
det(A)np.linalg.det(A)求行列式
[vector, value] = eig(A)value, vector = np.linalg.eig(A)求特征值与特征向量
A .* BA * B矩阵对应位置相乘
A * Bnp.dot(A, B)矩阵相乘
A.^2A**2矩阵各元素平方
sum(A, 1)np.sum(A, axis = 0)按列求和
sum(A, 2)np.sum(A, axis = 1)按行求和
sum(sum(A))np.sum(A)矩阵内所有元素求和
sort(A, 1)np.sort(A, axis = 0)按列排序
sort(A, 2)np.sort(A, axis = 1)按行排序
[A, B]np.hstack((A, B))按列扩充
[A; B]np.vstack((A, B))按行扩充
reshape(A, [m,n])np.reshape(A, (m, n), ‘F’)按列重组
(reshape(A’, [n, m]))’np.array(A, (m, n))按行重组
repmat(A, m, 1)np.tile(A, (m, 1))矩阵将其本身叠加m行
repmat(A, 1, n)np.tile(A, (1, n))矩阵将其本身叠加n列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值