Python中数据类型list、ndarray和matrix的区别

list、tuple、dictionary、set是Python中的4种基本集合类型
ndarray、matrix是NumPy包中的对象,其中matrix是ndarray的派生对象
在这里插入图片描述

list

python的list可以包含任意类型的对象, list可以是多维的,一个list里可以包含int, string或者其他任何对象, 另外list是可变长度的(list有append, extend和pop等方法).通过索引进行访问数据,比如a =[ [1, 2, 3], [4, 5, 6] ],a是二维列表,则若要访问a中的2,只有a[0][2]这种方法,a[0, 2]这种方法是不能用的,list通过[ ]申明,data=[]表明data为空列表。
所以, python内建的所谓”列表”其实是功能很强大的数组, 类比一下可以说它对应于java里面的ArrayList .

ndarray

ndarray是numpy的基石, 其实它更像一个java里面的标准数组: 所有元素有一个相同数据类型(dtype), 不过大小不是固定的.

ndarray对于大计算量的性能非常好, 所以list要做运算的时候一定要先转为array(np.array(a_list)).

ndarray带有一些非常实用的函数, 列举几个常用的: shape,sum, cumsum, argmax, reshape, T, …

ndarray有fancy indexing, 非常实用, 比如: a[a>3] 返回数组里大于3的元素

ndarray之间的乘法: 如果用乘法运算符*的话, 返回的是每个位置元素相乘(类似matlab里面的.), 想要矩阵相乘需要用dot().

常见矩阵的生成方法: ones(), zeros(), eye(), diag(), …

比如 a =np.array([ [1, 2, 3], [4, 5, 6] ]) 生成一个二维数组,若要取第2行第3列中的数据,则有方法a[1, 2],a[1][2]

Numpy是专门针对数组的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以在通用性能方面Numpy数组不及Python列表,但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。

Matrix和nadarray的区别

matrix是ndarray的派生对象, 所以前面ndarray那些优点都保留了.

同时, matrix全部都是二维的, 并且加入了一些更符合直觉的函数, 比如对于matrix对象而言matrix.I 得到逆矩阵,乘号运算符*得到的是矩阵乘法的结果,矩阵对应元素相乘则为np.multiply(mat1, mat2)而对于ndarray对象而言,其想实现矩阵相乘的效果,则通过np.dot(ndarray1,ndarray2)方法,对应元素相乘则为乘号运算符。不过它俩都有shape属性
numpy 中的ndarray与numpy中的matrix的最大的不同是,在做归约运算时,array的维数会发生变化,但matrix总是保持为2维。例如下面求平均值的运算

f1 = np.mat([[1, 2, 3], [1, 2, 3]])
f2 = np.array(f1)
print(f1.mean(1), '\n', f2.mean(1))  # 按行求平均数

结果

[[2.]
[2.]]
[2. 2.]

由此可以看出,二维数组f1在按行求平均值后变为了一维数组,而二维matrix f2在按行求平均值之后还是二维矩阵。

list、array和matrix之间的转换
list变成array:np.array(list)
list变成matrix:np.mat(list)
array和matrix相互转换:np.asmatrix( )和np.asarray( )
array变成list:data.tolist( )

应用最多的还是ndarray类型,在一个程序中能只用array,就全都用array为好,你不仅可以实现matrix所有的功能,还减少了不少编程和阅读的麻烦。
参考文章:
https://www.cnblogs.com/yangzhaonan/p/9245204.html
https://www.jianshu.com/p/90080701f1e9
https://www.cnblogs.com/yangzhaonan/p/9245204.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值