Numpy基础学习笔记
Numpy特点,N维数组对象ndarray。是一系列 同类型数据的集合。
跟列表的区别,打印元素中间没有逗号
一、数组创建
1.1、创建一维数组
import numpy as np
list=[1,2,3,4]
array=np.array(list)
print(type(array))
print(array)
<class ‘numpy.ndarray’>
[1 2 3 4]
创建数组的几种形式:
- 直接传入列表
list=np.array([1,2,3,4])
print(list)
[1 2 3 4]
- 传入range生成序列
list=np.array(range(5))
print(list)
[0 1 2 3 4]
- numpy自带的np.arrange()生成数组
list=np.arange(5)
print(list)
[0 1 2 3 4]
1.2、创建二维数组
list=[[1,2],[3,4],[5,6]]
array=np.array(list)
print(array)
[[1 2]
[3 4]
[5 6]]
1.3、属性(代码接上面二维数组)
- 获取数组维度
print(array.ndim)
2
- 获取数组的形状(几行几列)
print(array.shape)
(3, 2)
- 有多少元素
print(array.size)
6
1.4、调整数组的形状
注意shape与reshape的区别、与用法
- shape:修改的是原有的数组,shape后有=号
array.shape=(2,3)
print(array)
[[1 2 3]
[4 5 6]]
注意:转换为一维
#默认order="C",按行展开
array.shape=(6,)
#order="F",按列展开
array.shape=((6,),order="F")
print(array)
- reshape:原数组不修改,将修改后的返回一个新的数组;reshape后没有=号
注意reshape(-1,3)中的-1可代表任意值,即确定了列数,自适应行数。反之同理
new_array=array.reshape(2,3)
print(new_array)
print(array)
[[1 2 3]
[4 5 6]]
[[1 2]
[3 4]
[5 6]]
test_array=array.reshape(-1,3)
print(test_array)
[[1 2 3]
[4 5 6]]
1.5、将数组转换为列表
a=np.array([2,4,5,6,7])
list_a=a.tolist()
print(list_a)
print(type(list_a))
1.6、NumPy的数据类型
f=np.array([1,2,3,4,5,6],dtype=np.int16)
#查看元素的字节单位长度
print(f.itemsize)
#查看数组中元素的数据类型dtype,即data type
print(f.dtype)
#修改数据类型
f=f.astype(np.int64)
print(f.dtype)
2
int16
int64
二、数组的计算
1、数组和数的计算:广播
数组与单个值进行加减乘除,对数组的每个数据都进行计算
2、数组与数组之间的操作:对应位置计算
3、不种形状的多维数组不能计算
4、行数或者列数相同的一维数组和多维数组可以进行计算:
行形状相同(会与每一行数组的对应位相操作)
列形状相同(会与每一个相同维度的数组的对应位相操作)
三、数组中的轴
axis=0,横轴为刻度,计算后的值为对每一个刻度的计算(即列的计算)
#可以理解为按照横轴操作(比如原来横轴上5个刻度,即5列),最后的结果还要返回这5个刻度,所以是对列的计算
axis=1,纵轴为刻度,计算后的值为对每一个刻度的计算(即行的计算)
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a.shape=(3,2)
print(a)
print(np.sum(a,axis=0)) # [5 7 9]
print(np.sum(a,axis = 1)) # [ 6 15]
print(np.sum(a))# 计算所有的值的和
[[1 2]
[3 4]
[5 6]]
[ 9 12]
[ 3 7 11]
21
四、切片
1、取一行
2、取连续多行
3、取不连续多行
4、取某个值
5、取多个不连续的值
c=np.arange(24).reshape(4,6)
print(c)
#取1行,2种写法
print(c[2])
print(c[2,:])
#取连续多行,3种写法
print(c[1:])
print(c[1:3])
print(c[1:3,:])
#取不连续的多行,2种写法
print(c[[1,3],:]) #我喜欢这种写法,更清晰
print(c[[1,3]])
#取某个值
print(c[2,3]) #三行四列
#取多个不连续的值,[[行,行。。。],[列,列。。。]]
print(c[[2,3],[1,2]])
1、数组c
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
2、一行
[12 13 14 15 16 17]
3、连续多行
[[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[ 6 7 8 9 10 11]
[12 13 14 15 16 17]]
4、不连续多行
[[ 6 7 8 9 10 11]
[18 19 20 21 22 23]]
5、某个值
15
6、多个不连续的值
[13 20]
五、 三目运算
( np.where(condition, x, y)满足条件(condition),输出x,不满足输出y。))
score = np.array([[80,88],[82,81],[75,81]])
result = np.where(score>80,True,False)
print(result)
[[False True]
[ True True]
[False True]]
六、数组的增删改
6.1、※数组中数值的修改※
与切片类似,只是切片后赋值
- 通过索引定位修改
c[1,:]=0
c[:,1:3]=0
c[1:2,2:3]=0
c[[1,2],[2,3]]=0
- 通过条件判断元素值修改
c[c<10]=0
#逻辑判断,与或非
c[(c>2)&(c<9)]=0
c[(c<2)|(c>9)]=0
c[~(c>5)]=0
6.2、添加,append
numpy.append 函数在数组的末尾添加值。
追加操作会分配整个数组,并把原来的数组复制到新数组中。 即不改变原数组
参数说明:
arr:输入数组
values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)
axis:默认为 None。当axis无定义时,是横向加成,返回总是为一维数组!
当axis有定义的时候,分别为0和1的时
候。当axis有定义的时候,分别为0的时候(列数要相同)。当axis为1时,数组是加在右边(行数要相同)。
#注意:添加的也是二维数组格式[[1,2]]
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b=np.append(a,[[7,8,9],[3,3,3]],axis=0)
print(b)
[[1 2 3]
[4 5 6]
[7 8 9]
[3 3 3]]
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b=np.append(a,[[7,8,9],[3,3,3]])
print(b)
[1 2 3 4 5 6 7 8 9 3 3 3]
6.3、插入insert
numpy.insert 函数在给定索引之前,沿给定轴在输入数组中插入值。
如果值的类型转换为要插入,则它与输入数组不同。 插入没有原地的,函数会返回一个新数组。 此外,如果未提供轴,则输入数组会被展开。
#注意,插入的数组,写二维的、一维的都可以。数字也可以,会广播插入
a = np.array([[1,2],[3,4],[5,6]])
print ('第一个数组:')
print (a)
print ('\n')
print ('未传递 Axis 参数。 在插入之前输入数组会被展开。')
print (np.insert(a,3,[11,12]))
print ('\n')
print ('传递了 Axis 参数。 会广播值数组来配输入数组。')
print ('沿轴 0 广播:')
print (np.insert(a,1,[11],axis = 0))
print ('\n')
print ('沿轴 1 广播:')
print (np.insert(a,1,11,axis = 1))
第一个数组:
[[1 2]
[3 4]
[5 6]]
未传递 Axis 参数。 在插入之前输入数组会被展开。
[ 1 2 3 11 12 4 5 6]
传递了 Axis 参数。 会广播值数组来配输入数组。
沿轴 0 广播:
[[ 1 2]
[11 11]
[ 3 4]
[ 5 6]]
沿轴 1 广播:
[[ 1 11 2]
[ 3 11 4]
[ 5 11 6]]
6.4、删除
numpy.delete 函数返回从输入数组中删除指定子数组的新数组。 与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开。
‘’’
参数说明:
arr:输入数组
obj:可以被切片,整数或者整数数组,表明要从输入数组删除的子数组
数组去重
axis:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开
a = np.arange(12).reshape(3,4)
print ('第一个数组:')
print (a)
print ('\n')
print ('未传递 Axis 参数。 在删除之前输入数组会被展开。')
print (np.delete(a,5))
print ('\n')
print ('删除每一行中的第二列:')
print (np.delete(a,1,axis = 1))
print ('\n')
第一个数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
未传递 Axis 参数。 在删除之前输入数组会被展开。
[ 0 1 2 3 4 6 7 8 9 10 11]
删除每一行中的第二列:
[[ 0 2 3]
[ 4 6 7]
[ 8 10 11]]
6.5、去重
numpy.unique 函数用于去除数组中的重复元素。
arr:输入数组,如果不是一维数组则会展开
return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储
return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储
return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数
import numpy as np
a = np.array([5,2,6,2,7,5,6,8,2,9])
re,ind,cou=(np.unique(a,return_index=True,return_counts=True))
print(re,ind,cou)
[2 5 6 7 8 9] [1 0 2 4 7 9] [3 2 2 1 1 1]
七、Numpy的运算函数
- 数组中最大值
c=np.array([[10,11],[9,12],[8,13]])
a=np.max(c)
- 某轴中的最大/小值
a=np.min(c,axis=1)
#[10 9 8]
- 数据比较,两个数组比较
a=np.maximum([1,2,3,4,5],4)
#[4 4 4 4 5]
b=np.minimum([1,2,3,4,5],[6,1,7,2,3])
#[1 1 3 2 3]
- 平均值
a=np.mean(c,axis=0)
#[ 9. 12.]
- 给定轴的累积和
c=np.array([[1,2,3],[4,5,6]])
print(c.cumsum(0))
[[1 2 3]
[5 7 9]]
拼接、分割、转置,待完善