Python的数组、矩阵、列表创建
总的来说,就是不能像matlab那样直接创建数组(一维矩阵、向量):[1,2],这样的结果是列表。
1.数组是Python扩展库Numpy中的一种数据结构ndarray;矩阵是同样是Python扩展库Numpy中的一种数据结构mat;列表可以存储数组和矩阵。
Matlab | Python | 备注 |
[ ] 中输入创建矩阵,使用空格或逗号分隔列元素,分号分隔行元素 | [ ] 创建列表,逗号分隔的不同的数据项 | 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是一个图片的数据一维向量,那么在两个软件中塑形得到的二维图像是不一样的,需要转置等操作!
详细操作对应表
Matlab | Python | |
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) 内均匀分布的随机数 |
| 该函数可生成均值为 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 .* B | A * B | 矩阵对应位置相乘 |
A * B | np.dot(A, B) | 矩阵相乘 |
A.^2 | A**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列 |