前言
NUMPY(以下简称NP)是Python数据分析必不可少的第三方库,np的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型。如今,np已成为Python 数据分析的基础,可以说,NP是SciPy、Pandas等数据处理或科学计算库最基本的函数功能库。因此,理解np的数据类型对python数据分析十分有帮助。
NP提供了以下重点功能。
- 一个强大的N维数组对象ndarray
- 广功能函数
- 整合C/C++/Fortran代码的工具
- 提供了线性代数 傅里叶变换 随机数生成的相关功能
使用NUMPY操作数据集
了解什么是维度
官方概念 维度是一组数据的组织形式,不同数据维度可能表示不同的含义。
一维数据由对等关系的有序或无序数据构成,采用线性方式组织,可以用数组表示。如下所示
1,2,3,4
这么一行数据就可以称之为一维数据,但如果我们再对其折叠:
1,2
3,4
那么他就成为了二维数据,又可以称之为矩阵。
数据集
字面上理解就是一堆数据的集合喽
一般是二维或者多维数表。
手工建一个数据集,可以直接新建一个文本文件,只要有恰当的数据,都可以称之为数据集:
A,B,C,D
1,2,3,4
一,二,三,四
这样,我们就可以称上面的文件称之为数据集。我们还注意到,上面数据是使用逗号作为分隔符分隔数据的,它简单描述了数据的内容和含义,并使用半角逗号作为分隔符。像这样,用逗号分隔的数据集就称之为CSV(Comma-Separated Value,逗号分隔值)数据集,它是一种常见的文件格式,用来存储批量的数据。它就像一张excel表,用来存储简单结构的数据。
你可以把excel导出为CSV格式,用记事本打开
生成数据集
数据集是一个简单的概念,但每次使用手工的方式去写毕竟不方便,所以,我们可以使用np的内置函数来生成数据集
np.savetxt(frame,array,fmt='%.18e",delimiter=None)
//eg:
a= np.arange(20).reshape(4,5)
np.savetxt('demo.csv',a,fmt='%d',delimiter=',')
frame:文件、字符串、或产生器的名字,可以是.gz,.bz2的压缩文件
arrray:存入文件的NP的数组
fmt(format):写入文件的格式,如%d,%.2f,%.18e(默认,科学计数法保留18位)
delemiter:我们就会在当前的工作目录下发现一个新的demo.csv,用记事本打开,里面是一个4 * 5的矩阵,元素0~19。
面对二维以上的,csv就无能为力了
本文不在过多介绍文件存取数据集,后面的才是我的重点
链接
重点介绍以下内容
np数组
lst = [[1,3,5],[2,4,6]]
np_lst = np.array(lst,dtype=np.float)
print(np_lst.shape)#返回数组的行列
print(np_lst.ndim)#返回数组的维数
print(np_lst.dtype)#返回数据类型,float默认为64
print(np_lst.itemsize)#np.array每个元素的大小,float64占8个字节
print(np_lst.size)#大小,6个元素
(2, 3)
2
float64
8
6
初始化数组
print(np.zeros([2,4])#初始化一个2行4列的数组
print(np.ones([2,4])
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
随机数
print(np.random.rand(2,4))#将生成一个处于0~1之间2行4列的随机数序列(不加参数将只返回一个)
[[ 0.39531286 0.4845 0.1463168 0.82327991]
[ 0.89042255 0.65049931 0.43890163 0.89577744]]
print np.random.rand(5)#生成一个形状为5的一维数组
[ 0.9271712 0.18488478 0.02823013 0.74086267 0.22835426]
print np.random.rand(2,3) #生成2x3的二维数组
[[ 0.46315482 0.14754522 0.96079752]
[ 0.96255803 0.05377994 0.32438745]]
numpy.random.randint(low, high=None, size=None, dtype=’l’):
生成一个整数或N维整数数组,取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
np.random.randint(2,size=5) #array([0, 1, 1, 0, 1])
np.random.randint(2,6,size=5) #生成个数为5的一维整数数组
np.random.randint(2,size=(2,3))#生成一个2x3整数数组,取数范围:[0,2)随机整数
np.random.randint(2,6,(2,3))#生成一个2x3整数数组,取值范围:[2,6)随机整数
其他不太常用的
print(np.random.randn(2,4))#生成标准正态随机数
[[-1.15561548 0.3689953 0.38253231 -1.16346441]
[-1.32625322 -0.41707673 -0.11822205 -0.95807535]]
print(np.random.choice([10,20,40,33]))#从指定可迭代的数组中生成随机数
20
print(np.random.beta(1,10,4))#生成4个beta分布
[ 0.02258548 0.25848896 0.00696899 0.0609543 ]
print(np.arange(1,11,2))#得到step为2的range序列
[1 3 5 7 9]
print(np.arange(1,11).reshape(2,5))#(5可以缺省为-1)
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
提问:trainData = np.random.randint(0, 100, (25, 2)) 得到的是什么呢?