ndarray笔记续

数组的索引与切片

多维数组的索引

 1 import numpy as np
 2 arr=np.arange(1,25).reshape(2,3,4)
 3 arr
 4 # 输出 array([[[ 1,  2,  3,  4],
 5               [ 5,  6,  7,  8],
 6               [ 9, 10, 11, 12]],
 7  
 8              [[13, 14, 15, 16],
 9               [17, 18, 19, 20],
10               [21, 22, 23, 24]]])
11 arr[1][2][3]
12 # 输出24
13 arr[1,2,3]  # 与arr[1][2][3]结果一样
14 # 输出24
15 
16 arr[0,0:2,1:3]
17 # 输出array([[2, 3],
18                    [6, 7]])
19 arr[0][0:2][1:3]  # 与arr[0,0:2,1:3]结果不一样
20 # 输出array([[5, 6, 7, 8]])
21 
22 arr[0,1:2,1:3]
23 # 输出array([[6, 7]])
24 arr[0][0:2][1][1:3]  # 这样与arr[0,1:2,1:3]结果才能达到一致
25 # 输出array([6, 7])

2. NumPy中的数组的切片

3. 布尔型索引

 1 # 接上一个代码
 2 arr>6
 3 # 输出array([[[False, False, False, False],
 4              [False, False,  True,  True],
 5              [ True,  True,  True,  True]],
 6 
 7              [[ True,  True,  True,  True],
 8               [ True,  True,  True,  True],
 9               [ True,  True,  True,  True]]])
10 
11 arr[arr>6]
12 # 输出array([ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])

4. 花式索引

 1 import numpy as np
 2 arr1 = np.arange(32).reshape(8,4)
 3 # 输出  array([[ 0,  1,  2,  3],
 4               [ 4,  5,  6,  7],
 5               [ 8,  9, 10, 11],
 6               [12, 13, 14, 15],
 7               [16, 17, 18, 19],
 8               [20, 21, 22, 23],
 9               [24, 25, 26, 27],
10               [28, 29, 30, 31]])
11 
12 arr1[[0,3,5],[0,3,2]]  # 前一个取出行,后一个按位取出对应的列
13 # 输出 array([ 0, 15, 22])
14 
15 arr1[[0,3,5]]
16 # 输出 array([[ 0,  1,  2,  3],
17              [12, 13, 14, 15],
18              [20, 21, 22, 23]])
19 
20 arr1[np.ix_([0,3,5],[0,2,1,3])]  # [0,2,1,3]可以改变列的位置
21 # 输出 array([[ 0,  2,  1,  3],
22              [12, 14, 13, 15],
23              [20, 22, 21, 23]])
24                

数组转置与轴对换

1. transpose函数用于数组转置,对于二维数组来说就是行列互换

2. 数组的T属性,也是转置

arr1 = arr.T与arr2=arr.transpose()效果一样

通用函数:快速的元素级数组函数

ufunc:一种对ndarray中的数据执行元素级运算的函数,也可以看作是简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装起

一元ufunc

说明

abs,fabs

计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs

sqrt

计算各元素的平方根,相当于arr**0.5

square

计算各元素的平方,相当于arr**2

exp

计算各元素的指数e的x次方

log,log10log2

log1p

分别为自然对数、底数是10的log,底数为2的log,log(1+x)

sign

计算各元素的正负号:1正数,0零,-1负数

cell

计算各元素的ceiling值,即大于等于该值的最小整数

floor

计算各元素的floor值,即小于等于该值的最大整数

rint

将各元素值四舍五入到最接近的整数,保留dtype

modf

将数组的小数位和整数部分以两个独立数组的形式返回

isnan

返回一个表示“哪些值是NaN(不是一个数字)”的布尔类型数组

isfinite,isinf

分别返回一个表示“哪些元素是有穷的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组

cos,cosh,sin

sinh,tan,tanh

普通型和双曲型三角函数

arccos,arccosh,

arcsin,arctan,

arctanh

反三角函数

logical_not

计算各元素not x的真值,相当于~和-arr

add

将数组中相同位置对应的元素相加

substract

从第一个数组中减去第二个数组中的元素

multiply

数组元素相乘

divide,floor_divive

除法或者向下圆整除法(丢弃余数)

pow

对第一个数组中的元素A,根据第二个数组中的相应元素B,计算A的B次方

maximum,fmax

元素级别的最大值,fmax会忽略NaN

minimum,fmin

元素级别的最小值,fmin会忽略NaN

mod

元素级的求模(除法的余数)

copysign

将第二个数组中的值的符号复制给第一个数组中的对应位置的值

greater,

greater_equal,less

less_equal,equal

not_equal

执行元素级别的比较运算,最终产生布尔型数组

logical_and,

logical_or,

logical_xor

执行元素级别的布尔逻辑运算,相当于中缀运算符&、|、^

聚合函数

1. 聚合函数是对一组值(比如一个数组)进行操作,返回一个单一值作为结果的函数。因此求数组所有元素之和、求所有元素的最大最小值以及标准差的函数就是聚合函数

arr.max()  arr.min()  arr.mean() 

arr.std()标准差,相当于np.sqrt(np.power(arr-arr.mean(),2).sum()/arr.size)

 2. 聚合函数可以指定对数值的某个轴元素进行操作

arr.mean(axis=0)对每一列取均值    arr.mean(axis=1)对每一行取均值

axis=0时对同一列上的元素进行聚合 axis=1时对同一行上的元素进行聚合

np.where函数

1. np.where函数是三元表达式x if condition else y 的矢量化版本

 1 import numpy as np
 2 xarr=np.array([1.1,1.2,1.3,1.4,1.5])
 3 yarr=np.array([2.1,2.2,2.3,2.4,2.5])
 4 condition=np.array([True,False,True,True,False])
 5 result=[(x if c else y) for x,y,c in zip(xarr,yarr,condition)]
 6 result
 7 # 输出 [1.1, 2.2, 1.3, 1.4, 2.5]
 8 result2=np.where(condition,xarr,yarr)
 9 result2
10 # 输出 array([1.1, 2.2, 1.3, 1.4, 2.5])

2. 案例:将数组中所有NaN缺失值替换为0

 1 import numpy as np
 2 arr=np.array([[1,2,np.NaN,4],[3,4,5,np.NaN]])
 3 arr
 4 #  输出array([[ 1.,  2., nan,  4.],
 5              [ 3.,  4.,  5., nan]])
 6 np.isnan(arr)
 7 # 输出array([[False, False,  True, False],
 8             [False, False, False,  True]])
 9 np.where(np.isnan(arr),0,arr)
10 # 输出array([[1., 2., 0., 4.],
11            [3., 4., 5., 0.]])

np.unique函数

求数组中不重复的元素

1 import numpy as np
2 pd=np.array(['图书','数码','小吃','美食','男装','美食','女装','小吃'])
3 np.unique(pd)
4 # 输出 array(['图书', '女装', '小吃', '数码', '男装', '美食'], dtype='<U2')

数组数据文件读写

1. 将数组以二进制格式保存到磁盘

 1 import numpy as np
 2 data = np.array([[1,2,3,4],[2,3,4,5],[6,7,8,9],[2,3,4,6]])
 3 data
 4 # 输出 array([[1, 2, 3, 4],
 5              [2, 3, 4, 5],
 6              [6, 7, 8, 9],
 7              [2, 3, 4, 6]])
 8 np.save('data',data)  # 将多维数组存储到文件,自动添加后缀.npy (二进制文件)
 9 np.load('data.npy')  # 读取文件需要添加对应的后缀
10 # 输出 array([[1, 2, 3, 4],
11              [2, 3, 4, 5],
12              [6, 7, 8, 9],
13              [2, 3, 4, 6]])

2. 存取文本文件

 1 import numpy as np
 2 exp = np.loadtxt('example.csv',delimiter=',')
 3 exp
 4 # 输出array([[1., 2., 3., 4.],
 5             [2., 4., 5., 7.],
 6             [4., 1., 5., 9.]])
 7 
 8 np.genfromtxt('example.csv',delimiter=',')
 9 # 输出array([[1., 2., 3., 4.],
10             [2., 4., 5., 7.],
11             [4., 1., 5., 9.]])
12   

3. 数据写入文本文件

1 import numpy as np
2 np.savetxt('arr.csv',exp.reshape((2,6)),delimiter=',',fmt='%.2f')
3 exp2=np.random.random((2,3,4))
4 # 如果数组为二维以上的数组,则必须转换为二维数组才能进行存储,否则一定会出错
5 np.savetxt('arr1.csv',arr3.reshape((4,6)),delimiter=',')

 

posted @ 2019-08-20 21:04  yg_staring  阅读(337)  评论(0编辑  收藏  举报