转载https://blog.csdn.net/caoyuan666/article/details/105239876
概念
list数组
list是python基本数据类型,它的元素类型可以不同
元组或列表(tuple,list)没有矩阵概念,只有嵌套。所以你不能用[i,j]像matlab等里面一样去二维索引一个list,只能用[i][j]这样相当于索引了两次,先索引外层[i]个列表,再索引内层第j个元素。(类似地,[i,j,k…]改为[i][j][k][…]就ok)
x = list() x.append(1) x.extend([2,3,4])#多个elements
numpy数组
array是numpy的一种数据类型,它所包含的元素必须相同
Numpy是)专门针对数组的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以在通用性能方面Numpy数组不及Python列表,但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。
np.arange(a,b,c)表示产生从a-b不包括b,间隔为c的一个array,数据类型默认是int32。
linspace(a,b,c)表示的是把a-b平均分成c分,它包括b
浅拷贝和深拷贝
numpy数组
array的索引最终产生的是一个「 原始数据的浅拷贝」,他和原始数据共用一块内存。当我们修改了b的第一个元素的时候,a的第一个元素也被修改了。因为他们都是指向的同一个内存。
这是因为当我们执行b=a[:2]等语句的时候,拷贝的是指向这个元素的指针,当我们想要修改的时候,也是修改了指针指向的元素值。
list列表:
list对象在执行的时候拷贝了数据与指针,就不会有这种状况啦。
但是,对于列表,如果直接使用b = a,同样是浅拷贝,可以使用b = a[ : ]
实践部分
针对同样的元组类型,其切片slice和数字不太一样,slice切下来还是原本类型,数字索引一般丢弃一层“外壳”。
numpy里ndarray不是一种真正的“新”数据类型,而只是格式重排,将list分维度存储,便于利用。其本质类型和次级类型和lsit相似(但是比list省略了索引存储量,所以一般会节约存储空间)。
ps.
print("%s%s"%(x,x))#没有逗号,需要用%来对应
在循环或其他地方不希望print换行
print("ddd",end=' ')