Python之List、Numpy和数组

it2022-05-05  171

1. List

1.1基础
list = []#空列表 list[2]#列表中第3个元素 list[1:]#从第2个元素开始截取列表 list.append(obj)#列表末尾添加元素obj list.insert(index, obj)#将对象obj插入列表
1.2 range()函数
list = range(5) #list = [0,1,2,3,4] list = range(10,15) #list = [10,11,12,13,14]

range() 函数可创建一个整数列表,一般用在 for 循环中。

for i in range(3): print(i) #0 #1 #2

2、Numpy

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

2.1 numpy.linspace()函数

linspace()是外部库numpy的函数,在调用之前需要import numpy。 linspace(start,end,size),size是取点的个数。 注意没有linspace(start)这种形式,它内部最少要传递2个参数,但是这样的linspace(start,end)并不可控,所以要想获得你所想要的数字序列,最好使用linspace(start,end,size)形式。

import numpy as np l = np.linspace(3,12,4) print(l) #[ 3. 6. 9. 12.]
2.2 np.zeros()函数

生成相应大小的零矩阵。

np.zeros(5)###生成包含5个元素的零矩阵 #array([ 0., 0., 0., 0., 0.]) np.zeros((5,), dtype=np.int)###生成包含5个元素的零矩阵,且各元素为整形 #array([0, 0, 0, 0, 0]) np.zeros((2, 1))#生成2行1列的零矩阵 #array([[ 0.], # [ 0.]]) s = (2,2)#生成2行2列的零矩阵 np.zeros(s) #array([[ 0., 0.], # [ 0., 0.]])
2.3 np.array()函数和np.asarray()函数

array和asarray都可以将结构数据转化为ndarray;但是主要区别就是当数据源是ndarray时,array会copy出一个副本,占用新的内存,但asarray不会。 1).输入为列表list时

a=[[1,2,3],[4,5,6],[7,8,9]] b=np.array(a) c=np.asarray(a) a[2]=1 print(a) print(b) print(c)

从中我们可以看出np.array与np.asarray功能是一样的,都是将输入转为矩阵格式。当输入是列表的时候,更改列表的值并不会影响转化为矩阵的值。 2).输入为数组ndarray时

a=np.random.random((3,3)) print(a.dtype) b=np.array(a,dtype='float64') c=np.asarray(a,dtype='float64') a[2]=2 print(a) print(b) print(c)

从上述结果我们可以看出np.array与np.asarray的区别,在于输入为数组ndarray时,np.array是将输入copy一个副本,占用新的内存;而np.asarray是调用原内存数据。

3. 二维数组

3.1 二维数组

简单来说,二维数组就是有两层[]号,如

a=[[1,2],[3,4]]

a就是一个二维数组。 从Python角度看,就是list中的元素也是list;从矩阵角度看,矩阵在程序里的实现就是二维数组。 相应的,如果有N层[],就是N维数组,如

b = [ [[1,2],[3,4]], [[5,6],[7,8]] ]

b就是三维数组。

3.2 list和numpy.array的二维数组区别

这部分内容主要参考这位博客: Python中的二维数组(list与numpy.array).

import numpy as np #①list a=[[1,2,3],[4,5,6],[7,8,9]] print(type(a)) #<type 'list'> print(a) #[[1, 2, 3], [4, 5, 6], [7, 8, 9]] #②numpy b=np.array(a) print(type(b)) #<type 'numpy.array'> print(b) array=([[1,2,3], [4,5,6], [7,8,9]])

list对应的索引输出情况:

print(a[1][1]) #5 print(a[1])#第二行,所有列 #[4,5,6] print(a[1][:])#等同于a[1] #[4,5,6] print(a[1,1]) #error,相当于a[1,1]被认为是a[(1,1)],不支持元组索引 print(a[:,1]) #error

numpy.array对应的索引输出情况:

print(b[1][1]) #5 >>print(b[1]) #array([4,5,6]) >>print(b[1][:]) #array([4,5,6]) ###以上都与list类似 print(b[1,1]) #5 print(b[:,1]) #array([2,5,8])

由上面的简单对比可以看出, numpy.array支持比list更多的索引方式。此外从[Numpy-快速处理数据]上可以了解到“由于list的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],有3个指针和3个整数对象。”


最新回复(0)