11月10日学习总结--初识numpy
numpy是Python数据分析中非常重要的库,只要用到数据分析的地方,必然会使用numpy库。之所以会用到这个库,是因为它比Python的常用数据容器List相比,有以下优点:
1、numpy对象中储存的数据,类型都是一样的,这让它能够有更快的运行速度
2、numpy进行数据操作时,带有传播属性,可以省去使用for循环逐个元素操作。
关于numpy对象中储存的数据,类型都是一样的,这让它能够有更快的运行速度的说明:
不同于C、Java等语言,Python是一个解释型语言,同一个变量,可以赋整型值,也可以赋字符串,
比如可以:
a = 64
a = ‘a’
而如果在C语言中,写
int a = 64
a = ‘a’
就会报错,提示a是一个整型,是不能赋字符串的。
我们知道,Python的底层是用C语言写的,当我们在C语言中定义一个整型变量时,其底层是一个内存地址,这个内存地址里存着我们赋的整型值。而在Python中我们定义一个变量时,其底层是一个C语言的指针,指向的是C语言写的一个结构体,这个结构体由4部分组成:
1)索引数:通过索引数来统计这个变量被引用了多少次,当索引为0时,这个变量就会在内存中被销毁
2)变量类型:指示这个变量是C语言的那种数值类型
3)长度:指示这个变量的长度,如果是字符串这样的基础类型,指示的是字节数,如果是列表这样的类型,则指示是元素个数
4)数值:指示这个变量里的值,如果是整型,则是数字,如果是字符串类型,则是一个字符串
而Python的常用数据容器List,其底层也是一个C语言的指针,其可以存储不同类型的变量,这带来了很多的便利性,但是它也因此就必须记录每个变量的指针,这会让它占用更多的空间,也牺牲了运行的效率。
而numpy,由于强制规定数组里的元素的类型必须是一致的,因此它就能够省去很多空间,也能带来更快的运行效率。
关于numpy进行数据操作时,带有传播属性,可以省去使用for循环逐个元素操作的说明
如果我们想在一个list中,对所有的元素都乘以2,则我们需要使用for循环来逐个操作元素,
比如 a = [1,2,3,4],如果想要对a中的元素都乘以2 ,则需要写为
for i in range(len(a)):
a[i] = 2
而如果我们想对一个numpy对象的所有元素都乘以2,则直接乘以2即可,不需要使用for循环,
比如a = numpy.array([1,2,3,4]),如果想要对a的元素都乘以2,则写为a2即可
