Python ndarray数组 与 list列表区别

ndarray数组 与 list列表

数组(ndarray)与列表 ( list ) 类似,是具有相同类型的多个元素构成的整体。

数组局限:

数组元素要求是相同类型,而列表的元素可以是不同类型。

数组优势:

  • 数组可以与标量进行运算,数组之间也可以进行矢量化运算。

  • 数组在运算时,具有广播能力。

  • 数组底层使用C程序编写,运算速度快。

  • 数组底层使用C中数组的存储方式(紧凑存储),节省内存空间。

应用对比

#  数组的局限性,每个元素必须是相同的类型,python中的列表,每个元素都可以是不同类型

a = np.array([1,2,"ddd"])	# 都存储成字符类型
a = np.array([1,2,1.2])  	# 将三个元素都存储成float类型

数组的优势

优势1

  • 数组可以与标量进行运算,数组之间也可以进行矢量化运算。
代码举例:python中的列表,给列表中的每个元素+100,给数组中的每个元素+100,分别list和array都是如何操作
li=[1,2,3]
for i in range(len(li)):
li[i]=li[i]+100
array 的操作  100标量  a是数组(矢量),操作的时候,会使用矢量中的每个元素跟标量进行运算。
a = np.arange(1,4)
a + 100  

多个元素的矢量可以标量进行操作,通过【广播】来进行完成的
广播:为了进行对位运算,而尽量将两个数组中的一个数组(也可能是标量),扩展成跟另外一个数组相同的维度。
数组跟其他矢量进行运算,也可以通过广播来进行。
维度相同(可以进行直接的对位运算)

a = np.arange(1,4)
b = np.arange(10,40,10)
a+b # 进行对位运算

# result
array([11, 22, 33])

维度如果不同,也可以通过广播,来尽量匹配成对位的模式,来进行运算

# 维度不同的情况下,最低维度的个数相同即可。
a=np.arange(1,4)
b=np.array([[10,20,30],[100,200,300]])
a + b

# result
array([[ 11,  22,  33],
       [101, 202, 303]])

不是所有的情况,在任何场景下都能进行广播来进行矢量化运算 。要对位相同才行。

d = np.array([1,2])
b = np.array([[2,3,4],[5,6,7]])	
a + b  # 会报错

数组底层使用C程序编写,运算速度快,使用对列表进行循环的方式来创建新列表

优势2

  • 数组底层使用C中数组的存储方式(紧凑存储),节省内存空间。

  • 数据结构" 数组 "存储多个元素时,使用的最广泛一种数据结构

  • 数组存储特点:连续空间上存储元素

  • 优点:数组的随机访问性特别好。

  • 验证内存:ndarray占用的内存要比列表少

你可能感兴趣的:(Python)