Numpy Arrays

来源:互联网 发布:古筝考级教材知乎 编辑:程序博客网 时间:2024/06/03 18:34
list可以存储python中的任何对象作为其元素,但是在一个列表中基于元素的运算只能通过迭代循环(效率低下)来实现。
ndarray可以避免list的效率低下的缺点,narray类似于list,但是其存储类型的灵活性不如list一样好,只有同样的元素类型可以被存储在同一列
    e.g.第一列存储列表,第二列可以存储其他列表或者字典
array(in numpy)只能存储同一种类型的元素。
    e.g. 所有的元素必须是浮点型、整型或者字符串。

虽然有诸多限制,ndarray在进行多次运算的时候,运行速度仍有显著的提升。

arr=np.arange(1e5)#<class 'numpy.ndarray'>larr=arr.tolist()#list没有默认的广播功能,因此用list_times模拟ndarray所做。def list_times(alist,scalar):    for i,val in enumerate(alist):        alist[i]=val*scalar    return  alistt1=timeit.Timer('arr * 1.1',setup='from __main__ import arr' )print(t1.timeit(1))#0.000534083869640842t2=timeit.Timer('list_times(larr,1.1)',setup='from __main__ import list_times,larr')print(t2.timeit(1))#0.029095050097559593


当我们需要进行线性代数运算时,可以使用matrix(其可以避免使用ndarray的默认广播操作)
    ndarray*ndrray---A中的每个元素(i,j)*B中的每个元素(i,j)
    matrix*matrix---对A和B执行矩阵乘法运算
与ndarray不同,matrix最多只能是2维,如果试图构建一个3维或以上的是不可行的。

#create a 3D numpy arrayarr=np.zeros((3,3,3))#trying to convert array to a matrix,which will not workmat=np.matrix(arr)#ValueError: shape too large to be a matrix.

2.1.1 Array Creation and Data Typing 有很多方法创建一个array。

#创建一个list,然后用array()进行封装alist=[1,2,3]arr=np.array(alist)#创建一个有5个元素且都是0的数组arr=np.zeros(5)#创建一个从10到100的数组arr=np.arange(10,100)#创建一个元素为0的5*5的数组image=np.zeros((5,5))#创建一个元素为1的5*5*5的数组#astype() 设置数组元素为整型cube=np.zeros((5,5,5)).astype(int)+1#元素为1,类型为float16的数组cube=np.ones((5,5,5)).astype(np.float16)#创建数组时,numpy默认数据类型精度为当前Python环境的位深度。如果使用64位的python,那么数组也会默认为64位精度。#可以通过dtype= 设置元素类型(int, numpy.float16, numpy.float32, or numpy.float64)#array of zero integersarr=np.zeros(2,dtype=int)#array of zero floatsarr=np.zeros(2,dtype=np.float32)#我们也可以通过多种方法,对以上创建的数组进行改造。如果数组有25个元素,我们可以使其变为5*5的数组#创建0-999的数组arr1d=np.arange(1000)#改造成10*10*10 的3D数组arr3d=arr1d.reshape((10,10,10))#等同于arr3d=np.reshape(arr1d,(10,10,10))#相反的也可以使一个10*10*10*10的变为1000*1arr4d=np.zeros((10,10,10,10))arr1d=arr4d.ravel()print(arr1d)













#

原创粉丝点击