Python列表、Numpy数组与矩阵的区别

本文介绍了Python列表与Numpy数组、矩阵的区别,强调了Numpy在数值计算中的高效性和便利性。Numpy数组提供快速的数组操作,适合大数据处理,而矩阵则支持更简单的乘法运算。在转换方面,np.asarray()用于数组转换,np.matrix()用于矩阵转换。矩阵必须为2维,而数组可以多维。在归约运算时,数组维数会变化,矩阵始终保持2维。了解这些差异对于优化代码和提高计算效率至关重要。
摘要由CSDN通过智能技术生成

Python列表和Numpy数组的区别:

Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组,那么为什么还需要使用Numpy呢?Numpy是专门针对数组的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以在通用性能方面Numpy数组不及Python列表,但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。

能用array的尽量用array,迫不得已要用matrix的,最后再转换为array!

两个重要转换函数:

  • np.asarray():转换为数组
  • np.matrix():转换为矩阵

Numpy数组和矩阵的区别:

  • Numpy matrix必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。
  • 在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。
  • matrix 和 array 都可以通过objects后面加.T 得到其转置。 但是 matrix objects 还可以在后面加 .H f得到共轭矩阵, 加 .I 得到逆矩阵。
  • 相反的是在numpy里面arrays遵从逐个元素的运算,所以array:c 和d的c*d运算相当于matlab里面的c.*d运算。而矩阵相乘,则需要numpy里面的dot命令 。

正是由于matrix必须是二维的,当只有一个元素时(例如:1)matrix下的shape=(1,1)而array下的shape=(1,)在这里插入图片描述
在这里插入图片描述

x = np.matrix(np.arange(12).reshape((3,4))); x
Out[23]: 
matrix([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
y=np.asarray(x)
y
Out[25]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
x[0]
Out[26]: matrix([[0, 1, 2, 3]])
y[0]
Out[27]: array([0, 1, 2, 3])
x[0][1] #矩阵情况下报错
Traceback (most recent call last):
  File "A:\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3418, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-28-9bcfb00c9414>", line 1, in <module>
    x[0][1]
  File "A:\anaconda3\lib\site-packages\numpy\matrixlib\defmatrix.py", line 193, in __getitem__
    out = N.ndarray.__getitem__(self, index)
IndexError: index 1 is out of bounds for axis 0 with size 1
y[0][1] #矩阵情况下未报错
Out[29]: 1
x[0].shape
Out[30]: (1, 4)
y[0].shape
Out[31]: (4,)

在做归约运算时,array的维数会发生变化,但matrix总是保持为2维。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@u@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值