Python数据科学包-初识numpy

本文介绍了Python数据科学中的重要包numpy,包括其与pandas的作用、安装教程、numpy属性、array创建与操作、基础运算、索引、数组合并与分隔以及复制原理。通过学习,读者可以掌握numpy的基本使用。
摘要由CSDN通过智能技术生成

1、numpy & pandas 有什么用

为什么用numpy & pandas?
答:numpy & pandas是科学计算包,计算速度会快很多倍

2、numpy & pandas 安装 (教学教程)

安装 Anaconda 以及numpy、 Scikit-learn 等必备库,参考以下链接
https://blog.csdn.net/tz_zs/article/details/73459800?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4
anaconda建造新的环境,参考以下链接
https://blog.csdn.net/x_iesheng/article/details/79725415?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1

3、 numpy 属性 (教学教程)

import numpy as np
array = np.array([[1,2,3],
                 [2,3,4]])
print(array)
print('number of dim:',array.ndim)#2维
print('shape:',array.shape)#2行3列
print('size:',array.size)#总共6个元素
'''
运行结果
[[1 2 3]
 [2 3 4]]
number of dim: 2
shape: (2, 3)
size: 6
'''

4、numpy 的创建 array

初识array arange linspace reshape

import numpy as np
a = np.array([[2,23,4],
             [2,32,4]])#定义一个2行3列的矩阵
print('a:',a) #打印结果之间,无逗号分隔
b=np.zeros((3,4))#定义一个3行4列的零矩阵
print('b:',b)
c=np.ones((3,4),dtype=np.int16)#定义一个3行4列的1矩阵
print('c:',c)
d=np.empty((3,4))#定义一个3行4列的无穷小值矩阵
print('d:',d)
e=np.arange(10,20,2)#定义一个初始值为10,终止值为20,步长为2的数列
print('e:',e)
f= np.arange(12).reshape((3,4))#把数列重新定义成一个3行4列的矩阵
print('f:',f)
g= np.linspace(1,10,20)#定义一个初始值为10,终止值为20,20段的线段
print('g:',g)
h= np.linspace(1,10,6).reshape((2,3))#定义一个初始值为10,终止值为20,20段的线段,再重写线段为2行2列的矩阵
print('h:',h)
'''
运行结果
a: [[ 2 23  4]
 [ 2 32  4]]
b: [[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]
c: [[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
d: [[  1.44635488e-307   1.33511562e-306   1.69121775e-306   1.69122046e-306]
 [  1.05700260e-307   1.11259601e-306   2.04721870e-306   2.04721870e-306]
 [  1.06809181e-306   6.23057349e-307   8.90068589e-308   1.44635488e-307]]
e: [10 12 14 16 18]
f: [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
g: [  1.           1.47368421   1.94736842   2.42105263   2.89473684
   3.36842105   3.84210526   4.31578947   4.78947368   5.26315789
   5.73684211   6.21052632   6.68421053   7.15789474   7.63157895
   8.10526316   8.57894737   9.05263158   9.52631579  10.        ]
h: [[  1.    2.8   4.6]
 [  6.4   8.2  10. ]]
'''

5、numpy的基础运算

数列运算

import numpy as np
a = np.array([10,20,30,40])#定义一个1维数列
b=np.arange(4)#定义一个4个元素的1维数列
print(a,b)
c=a-b#数列相减,一一对应
d=a+b#数列相加,一一对应
e=a*b#数列相乘,一一对应
f=a**2#数列平方,一一对应
g=10*np.sin(a)#求sin函数

print(c,d,e,f,g,b<3,sep='\n')
'''
运行结果
[10 20 30 40] [0 1 2 3]
[10 19 28 37]
[10 21 32 43]
[  0  20  60 120]
[ 100  400  900 1600]
[-5.44021111  9.12945251 -9.88031624  7.4511316 ]
[ True  True  True False]
'''

矩阵运算

import numpy as np
a = np.array([[1,1],
             [0,1]])
b=np.arange(4).reshape((2,2))
c=a*b#数列运算,一一对应
c_dot=np.dot(a,b)#矩阵运算,和线性代数中运算方法一致
c_dot_2=a.dot(b)#矩阵运算第二种写法
print('a:',a)
print('b:',b)
print('c:',c)
print('c_dot:',c_dot)
print('c_dot_2:',c_dot_2)
'''
运行结果
a: [[1 1]
 [0 1]]
b: [[0 1]
 [2 3]]
c: [[0 1]
 [0 3]]
c_dot: [[2 4]
 [2 3]]
c_dot_2: [[2 4]
 [2 3]]
'''

axis操作

import numpy as np
a = np.random.random((2,4))#定义一个随机的2行4列的数组
b=np.sum(a)#数组所有元素的和
c=np.min(a)#数组所有元素中的最小值
d=np.max(a)#数组所有元素中的最大值
e=np.min(a,axis=0)#数组每列中的最小值
f=np.max(a,axis=1)#数组每行中的最大值
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
print('e:',e)
print('f:',f)
'''
运行结果
a: [[ 0.32610243  0.11649399  0.56386401  0.00982775]
 [ 0.51406967  0.44514835  0.30127433  0.32724873]]
b: 2.60402925453
c: 0.00982774954999
d: 0.563864011448
e: [ 0.32610243  0.11649399  0.30127433  0.00982775]
f: [ 0.56386401  0.51406967]
'''

6、numpy的基础运算(二)

argmax、argmin、mean、average、cumsum、diff、nonzero、sort、transpose、clip

import numpy as np
a = np.arange(2,14).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列
b=np.argmax(a)#返回数组中最大值的序号
c=np.argmin(a)#返回数组中最小值的序号
d=np.mean(a)#返回数组中的平均值
e=a.mean()#求平均值的另一种写法
f=np.average(a)#返回数组中的平均值
g=np.cumsum((a))#返回数组元素以斐波那契数列方式的计算值,换回数组个数与之前一样
h=np.diff(a)#返回数组元素的两数之差,返回的数组元素个数为(a的行数-1)*a的列数
i=np.nonzero(a)#返回数组a中非零值的行序和列序
j=np.sort(a)#数组a排序,但维持原有维度不变
k=np.transpose(a)#矩阵转置
o=(a.T).dot(a)#矩阵转置然后和自身做矩阵乘法
p=np.clip(a,5,9)#矩阵中小于5的值会变成5,大于9的值会变成9

print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
print('e:',e)
print('f:',f)
print('g:',g)
print('h:',h)
print('i:',i)
print('j:',j)
print('k:',k)
print('o:',o)
print('p:',p)
'''
运行结果
a: [[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
b: 11
c: 0
d: 7.5
e: 7.5
f: 7.5
g: [ 2  5  9 14 20 27 35 44 54 65 77 90]
h: [[1 1 1]
 [1 1 1]
 [1 1 1]]
i: (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
j: [[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
k: [[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
o: [[140 158 176 194]
 [158 179 200 221]
 [176 200 224 248]
 [194 221 248 275]]
p: [[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]
'''

7、numpy的索引

数组的索引

import numpy as np
a = np.arange(3,15).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列
b=a[1][2]#返回数组1行2列的值
c=a[1,2]#返回数组1行2列的值,与上面有相同的效果
d=a[1,1:3]#返回数组中第一行,数列中[1:3]的切片值

print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)

'''
运行结果
a: [[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
b: 9
c: 9
d: [8 9]
'''

遍历数组中的每一行

import numpy as np
a = np.arange(3,15).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列
print('a:',a)
print('____________________________________')
for row in a:#遍历数组每一行,并打印
    print(row)
print('____________________________________')
for column in a.T:#遍历数组每一列,并打印
    print(column)
print('____________________________________')
for item in a.flat:#把a‘拍平’,然后再遍历每一项,然后打印
    print(item)
'''
运行结果
a: [[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
____________________________________
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
____________________________________
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
____________________________________
3
4
5
6
7
8
9
10
11
12
13
14
'''

8、numpy的 array 合并

import numpy as np
a=np.array([1,1,1])
b=np.array([2,2,2])
c=np.vstack((a,b))#vertical stack 竖向合并,维度增加
d=np.hstack((a,b))#horizontal stack 横向合并,维度不变
e=a[np.newaxis,:]#在a的行上增加一个维度
f=a[:,np.newaxis]#在a的列上增加一个维度
A=np.array([1,1,1])[:,np.newaxis]
B=np.array([2,2,2])[:,np.newaxis]
g=np.concatenate((A,B,B,A),axis=0)#将(A,B,B,A)按行合并,将(A,B,B,A)中axis=0的值按顺序放在一起
h=np.concatenate((A,B,B,A),axis=1)#将(A,B,B,A)按列合并,将(A,B,B,A)中axis=1的值按顺序放在一起
print('a:',a)
print('a.shape:',a.shape)
print('____________________________________')
print('b:',b)
print('c:',c)
print('d:',d)
print('e:',e)
print('e.shape:',e.shape)
print('____________________________________')
print('f:',f)
print('f.shape:',f.shape)
print('____________________________________')
print('g:',g)
print('____________________________________')
print('h:',h)
'''
运行结果
a: [1 1 1]
a.shape: (3,)
____________________________________
b: [2 2 2]
c: [[1 1 1]
 [2 2 2]]
d: [1 1 1 2 2 2]
e: [[1 1 1]]
e.shape: (1, 3)
____________________________________
f: [[1]
 [1]
 [1]]
f.shape: (3, 1)
____________________________________
g: [[1]
 [1]
 [1]
 [2]
 [2]
 [2]
 [2]
 [2]
 [2]
 [1]
 [1]
 [1]]
____________________________________
h: [[1 2 2 1]
 [1 2 2 1]
 [1 2 2 1]]
'''

9、numpy的 array 分隔

import numpy as np
a=np.arange(12).reshape(3,4)
b=np.split(a,2,axis=1)#将a按列分为2块,返回list对象
c=np.split(a,3,axis=0)#将a按行分为3块,返回list对象
d=np.array_split(a,3,axis=1)#将a按列分为2块,不等分,返回list对象
e=np.array_split(a,2,axis=0)#将a按行分为3块,不等分,返回list对象
f=np.vsplit(a,3)#将a按列等分,返回list对象
g=np.hsplit(a,2)#将a按行等分,返回list对象
print('a:',a)
print('a.shape:',a.shape)
print('____________________________________')
print('b:',b)
print('b是list对象,b[0].shape:',b[0].shape)
print('____________________________________')
print('c:',c)
print('c是list对象,c[0].shape:',c[0].shape)
print('____________________________________')
print('d:',d)
print('d是list对象,d[0].shape:',d[0].shape)
print('____________________________________')
print('e:',e)
print('e是list对象,e[0].shape:',e[0].shape)
print('____________________________________')
print('f:',f)
print('f是list对象,f[0].shape:',f[0].shape)
print('____________________________________')

'''
运行结果
a: [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
a.shape: (3, 4)
____________________________________
b: [array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
b是list对象,b[0].shape: (3, 2)
____________________________________
c: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
c是list对象,c[0].shape: (1, 4)
____________________________________
d: [array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
d是list对象,d[0].shape: (3, 2)
____________________________________
e: [array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
e是list对象,e[0].shape: (2, 4)
____________________________________
f: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
f是list对象,f[0].shape: (1, 4)
____________________________________
'''

10、numpy的 copy & deep copy

直接赋值是浅拷贝,使用copy方法是深拷贝

import numpy as np
a=np.arange(4)
print('a:',a)
print('____________________________________')
b=a
c=a
d=b
a[0]=0.9#给a中元素替换成浮点数时,a不变
print('a:',a)
print('____________________________________')
a[0]=11#给a中元素替换成整数时,a的值改变
print('a:',a)
print('____________________________________')
print('b:',b)#b的值随之改变,说明把a赋值给b,a和b指向内存中同一个id
print(a is b)
print('____________________________________')
print('d:',d)#d的值也随之改变,说明经过多次赋值,d和b指向内存中同一个id
print(d is b)
print('____________________________________')
f=a.copy()
print(id(f))
print(id(a))
print(f is b)#说明f是深拷贝,f和a指向内存中的不同id
print('____________________________________')

'''
运行结果
a: [0 1 2 3]
____________________________________
a: [0 1 2 3]
____________________________________
a: [11  1  2  3]
____________________________________
b: [11  1  2  3]
True
____________________________________
d: [11  1  2  3]
True
____________________________________
39419056
39418976
False
____________________________________
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值