Python数据分析之Numpy初体验
前言
本文阅读需要您对python有一点基础,如果有不懂得概念,请善用搜索引擎。
本人官方博客地址:www.zacarx.com
导入
我们有多种导入方法
不过,我比较推荐的是:
import numpy as np
这样,我们就完成了导入工作
数组对象及其索引
我们引入两个数组
a = [1,2,3,4]
b = [2,3,4,5]
如果我们需要将a的元素相加,我们可以使用for语句
如果我们让a,b对应元素相加,也是需要for的帮助
不过比较麻烦,这时,我们就可用numpy了
如:
a = np.array([1,2,3,4])
a
>>>array([1, 2, 3, 4])
a+1
>>>array([2, 3, 4, 5])
b= np.array([2,3,4,5])
a+b
>>>array([3, 5, 7, 9])
显然,使用numpy将大大简化我们的工作,不过这对它来说只是小菜一碟。
数组产生
下来,我们将看下几个比较便利的产生数组的方法
比如生成全0数组:
a=np.zero(5)
>>>array([0., 0., 0., 0., 0.])
值得注意的是,中括号内元素,默认浮点数
当然,我们也可以指定一下:
a=(np.zero(5),dtype=int)
>>>array([0, 0, 0, 0, 0])
这样就生成的是整数了
此外,我们还可以使用astype进行类型转换
如:
a = a.astype("float")
这样就可以把数组a的元素转换为浮点数
此外,我们还可以这样生成数列:
左闭右开区间,和range的使用方式同理
a = np.arange(1,10)
a
>>>array([1.3, 2.3, 3.3, 4.3, 5.3, 6.3, 7.3, 8.3, 9.3])
当然,我们也可以生成随机数
np.random.rand(10)
>>>array([0.48273436, 0.00581325, 0.16110313, 0.52234425, 0.63905254, 0.42691122, 0.37196789, 0.57188523, 0.46437865, 0.43126664])
np.random.randint(1,20,10)
#生成随机整数,从1-20中随机10个
>>>array([12, 6, 4, 3, 13, 19, 5, 4, 14, 16])
数组属性
这个暂时没有太大用处
等用得到的地方我们再来好好讲解
下来,我们简单提一下比较常用的吧:
查看类型:type(a)
查看数组中的数据类型:a.dtype
查看形状,会返回一个元组,每个元素代表这一维的元素数目:a.shape
查看数组元素个数:a.size
Ok,以上就是简单的属性查看方法
如果有需要我会再进行补充。
索引和切片
以下操作非常简单,我们只需类比一下列表即可
我不做过多讲解了,QAQ
a = np.array([0,1,2,3])
a[0]
>>>0
a[0] = 10
a
>>>10
a[1:3] #等价于a[-3,3]
>>>array([1,2])
下面介绍一下省略参数的用法
如:
a = array([1,2,3,4,5])
a[-2:]
>>>array([4,5])
这样,输出倒数第二个数字及以后的数字
a = array([1,2,3,4,5])
a[::2]
>>>array([1,3,5])
这样输出从头到尾的数字,不过间隔为2.
多维数组
我们一般使用下面这个方法生成多维数组:
a = np.array([[0,1,2,3],[10,11,12,13]])
a
>>>array([[ 0, 1, 2, 3],
[10, 11, 12, 13]])
我们可以进行索引还有赋值:
a[1,3]
>>>13
a[1,3]=999
a[1,3]
>>>999
a
>>>array([[ 0, 1, 2, 3],
[10, 11, 12, 999]])
1是行索引,3是列索引,中间用逗号隔开。事实上,Python会将它们看成一个元组(1,3),然后按照顺序对应。
当然,我们也可以进行整行整列的索引
a[1]
>>>array([ 0, 1, 2, 3])
a[:,1]
>>>array([ 1, 11])
下面,我们看一下切片操作吧
有了上述的知识基础,相信你也能够看懂了吧。
a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
>>>array([[ 0, 1, 2, 3, 4, 5],
[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[30, 31, 32, 33, 34, 35],
[40, 41, 42, 43, 44, 45],
[50, 51, 52, 53, 54, 55]])
a[0,3:5]
>>>array([3, 4])
a[4:,4:]
>>>array([[44, 45],
[54, 55]])
a[2::2,::2]
>>>array([[20, 22, 24],
[40, 42, 44]])
ok,是不是非常简单,赶快去试一试吧。
不知你会不会注意到一个现象
比如:
a = np.array([0,1,2,3,4])
b = a[2:4]
b
>>>[2 3]
b[0] = 10
a
>>>array([ 0, 1, 10, 3, 4])
显然,Python并没有为b分配新的空间来存储它的值,而是让b指向了a所分配的内存空间,因此,改变b会改变a的值
一定要注意这一点,因为它很容易忽略T-T,你还找不到原因。
okk,那我们怎么解决它捏?
这就要提到copy方法了
a = np.array([0,1,2,3,4])
b = a[2:4].copy()
b[0] = 10
a
ok,成功解决!
高级索引
除了以上所使用的索引,还有更高级的高级索引
如:
a = np.array([0,2,3,0,0,1,0,0,1,0],dtype = bool)
a
>>>array([False, True, True, False, False, True, False, False, True, False])
当然还可以这样:
a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
>>>array([[ 0, 1, 2, 3, 4, 5],
[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[30, 31, 32, 33, 34, 35],
[40, 41, 42, 43, 44, 45],
[50, 51, 52, 53, 54, 55]])
a[(0,1,2,3,4),(1,2,3,4,5)]
>>>array([ 1, 12, 23, 34, 45])
这样我们就可以得到对角线上的5个值了
以上两个例子仅仅为了给家人们一点思路
家人们也可以配合省略参数等用法,玩出更多新花样。
数组函数
最后,我们来看看数组应用比较多的几个函数吧
其实非常简单
如下:
a=([1,3,2,3,22822,4,2,2,4,2,99,4,4,44,444,222,44,])
np.sort(a)
>>>array([ 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 44, 44, 99, 222, 444, 22822])
#排序
np.sum(a)
>>>23706
#求和
np.max(a)
>>>22822
np.min(a)
>>>1
#最大最小
np.mean(a)
#均值
>>>1394.4705882352941
np.std(a)
#标准差
>>>5358.042642142492
#协方差矩阵
np.cov(a)
>>>array(30502909.76470589)
ok,以上就是numpy的简单用法
感谢您的阅读!
- 点赞
- 收藏
- 关注作者
评论(0)