一.引入numpy:
import numpy as np
二.使用array方法创建数组:
1.numpy的array方法,用于创建自定义数组
(1)创建一个一维数组,对于这种整数,数据类型默认int64,可自行指定(见下)
arr = np.array([1,2,3],dtype='int32') print arr
执行:
[1, 2, 3]
(2)创建一个二维数组
arr = np.array([[1,2,3],[4,5,6]]) print arr
执行:
[[1, 2, 3], [4, 5, 6]]
数组和列表的区别是什么?
数组中存储的数据元素类型必须是统一类型,numpy会依据优先级将数组内容强制转成统一类型。
优先级:字符串 > 浮点型 > 整数
2.numpy的其他方法,用于创建一维规律数组
(1)ones创建一个全是1的数组:
np.ones(shape=(行数,列数))
(2)linspace创建等差数列数组,定义数量:
np.linspace(起,止(会包括),num=数的量)
比如:
np.linspace(0,100,num=5)
输出:
array([ 0., 25., 50., 75., 100.])
(3)arange创建等差数列数组,定义差值:
np.arange(起,止(不包括),step=差值)
比如:
np.arange(10,50,step=2)
输出:
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,
44, 46, 48])
(3)random.randint创建随机整数数组,定义区间与行列
np.random.randint(区间下限,区间上限,size=(行,列))
比如
np.random.randint(0,100,size=(5,3))
输出
array([[19, 0, 17],
[72, 29, 13],
[69, 59, 68],
[63, 54, 87],
[70, 64, 0]])
三.numpy的数组属性查询
1.首先创建一个数组
arr = np.random.randint(0,100,size=(5,6))
输出为
array([[43, 96, 75, 1, 34, 88],
[96, 2, 17, 34, 26, 57],
[71, 36, 11, 11, 10, 29],
[72, 46, 51, 4, 27, 75],
[80, 42, 27, 55, 19, 43]])
2.查询上述数组的属性:
(1)arr.shape #返回的是数组的形状:(5, 6)
(2)arr.ndim #返回的是数组的维度:2
(3)arr.size #返回数组元素的个数:30
(4)arr.dtype #返回的是数组元素的类型:dtype('int64')
数组元素数据类型如下:
修改数组元素类型的方法:
1.创建时就指定:arr = np.array([1,2,3],dtype='int32') #默认是64位,改成32位可节省内存开支
2.修改已有数组:arr.dtype = 'uint8' (5)type(arr) #返回数组的数据类型(这是numpy的ndarray数据):numpy.ndarray
四.numpy数组的索引和切片
1.首先创建一个数组:
arr = np.random.randint(1,100,size=(5,6)) arr
输出为:
array([[68, 31, 72, 88, 62, 47],
[54, 78, 43, 38, 94, 29],
[15, 84, 25, 72, 34, 24],
[81, 36, 77, 66, 94, 27],
[53, 5, 3, 91, 3, 15]])
2.索引操作(类似列表):
(1)取出某行(行数从0起计):
arr[1] #取出numpy数组中第二行数据
输出:
array([54, 78, 43, 38, 94, 29])
(2)取出多行:
arr[[1,3,4]]
输出:
array([[37, 57, 26, 92, 91, 34],
[ 5, 16, 47, 66, 51, 12],
[54, 63, 20, 11, 94, 88]])
3.切片操作
(1)取出数组中指定范围行列之间的数据:
arr[行起:行止,列起:列止] #如只取行,列起止及其之间的冒号可以省略,如只取列,可以省略行起止但不能省略之间冒号
比如:
arr[0:2,0:2] #切出前两行的前两列的数据
输出:
array([[69, 80],
[37, 57]])
(3)倒置数组指令::-1:
1.arr[::-1] #将数组的行倒置
2.arr[:,::-1] #将数组的列倒置
3.arr[::-1,::-1] #所有元素倒置
4.变形操作reshape:
将数组元素以指定的行列重组。
比如一维数组;
arr = np.array([47, 30, 42, 36, 82, 68, 4, 37, 17, 39, 91, 33, 7, 4, 5, 51, 23,
89, 5, 56, 28, 81, 26, 46, 29, 10, 91, 23, 12, 11])
可变形成5行6列:
arr_1 = arr.reshape((6,5))
arr_1为:
array([[47, 30, 42, 36, 82],
[68, 4, 37, 17, 39],
[91, 33, 7, 4, 5],
[51, 23, 89, 5, 56],
[28, 81, 26, 46, 29],
[10, 91, 23, 12, 11]])
五.numpy的数学操作:
1.数组级联操作concatenate
concatenate是np下属方法。可以拼接多个数组:
np.concatenate((数组1,数组2),axis=1) #axis取1时是横向(行级联);取0时是纵向(列级联)
级联的两个数组必须是同一维度,行列相同
2.数学函数:
现有一数组:
arr = array([[69, 80, 7, 90, 31, 44],
[37, 57, 26, 92, 91, 34],
[13, 16, 93, 54, 87, 34],
[ 5, 16, 47, 66, 51, 12],
[54, 63, 20, 11, 94, 88]])
(1)sum求和:
sum是数组下属方法,可以求所有元素或者所有行、列的和。
比如:arr.sum() #求所有元素和,输出1482
arr.sum(axis=1) #求所有行元素和,输出array([321, 337, 297, 197, 330])
arr.sum(axis=0) #求所有列元素和,输出array([178, 232, 193, 313, 354, 212])
(2)max求最大值:
arr.max(axis=1) #不写axis:求最大值;axis为1:求每行最大值;为0:求每列最大值
(3)三角函数sin、cos、sinc(反三角函数)、tan等等:
这些都是np下属方法。可以直接计算数字,不用写入数组
比如np.sin(2.5)输出0.5984721441039564
比如np.sin(arr),则计算每个数的sin值,输出:
array([[-0.11478481, -0.99388865, 0.6569866 , 0.89399666, -0.40403765,
0.01770193],
[-0.64353813, 0.43616476, 0.76255845, -0.77946607, 0.10598751,
0.52908269],
[ 0.42016704, -0.28790332, -0.94828214, -0.55878905, -0.82181784,
0.52908269],
[-0.95892427, -0.28790332, 0.12357312, -0.02655115, 0.67022918,
-0.53657292],
[-0.55878905, 0.1673557 , 0.91294525, -0.99999021, -0.24525199,
0.0353983 ]])
(4)四舍五入:
numpy.around(a,decimals) #函数返回指定数字的四舍五入值。
参数说明:
a: 数组
decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置,不写则保留到个位数
比如
np.around(arr,-1)
输出
array([[70, 80, 10, 90, 30, 40],
[40, 60, 30, 90, 90, 30],
[10, 20, 90, 50, 90, 30],
[ 0, 20, 50, 70, 50, 10],
[50, 60, 20, 10, 90, 90]])
3.统计函数:
(1) numpy.ptp():计算数组中元素最大值与最小值的差(最大值 - 最小值)。
(2)numpy.median() 函数用于计算数组 a 中元素的中位数(中值)
(3)标准差arr[1].std()计算arr第一行所有数的标准差
(4)方差arr[:,0:1].var()计算arr第一列所有数的方差
六.numpy的矩阵操作
1.创建一个单位矩阵
np.eye(n) #n为阶数
比如
np.eye(6)
输出
array([[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 1.]])
2.矩阵转置
arr.T #该指令即可转置矩阵arr
3.矩阵乘法dot
dot是np下属方法。
np.dot(arr1, arr2) #将矩阵arr1和矩阵arr2相乘



