Numpy入门,看这一篇就够了!



公众号后台回复“图书“,了解更多号主新书内容
     作者:J哥
     来源:菜J学Python

本文系统讲解Numpy基础知识,对于初学数据处理和分析帮助很多,希望你能收藏此文,好好学习,以下是本文框架结构:


本文目录

定义


数组类型

基本类型

类型转换

   In:

j = np.arange(3)  
print(j)
print('查看数据类型:\n',j.dtype)
print('-'*20)
g = j.astype('float') #转换为float类型
print('查看转换后类型:\n',g.dtype)

  Out:

[0 1 2]
查看数据类型:
 int64
--------------------
查看转换后类型:
 float64

数组操作

创建数组

   In:

#方法一、将列表或元组传入np.array()来创建
print(np.array([1,2,3])) 
#方法二、初始化数组的值,只需传入元素个数即可
print(np.ones(3))
print(np.zeros(3))
print(np.random.random(3))

  Out:

[1 2 3]
[1. 1. 1.]
[0. 0. 0.]
[0.71318806 0.95903425 0.75384478]

数组运算

In:

#首先创建两个数组
data1 = np.array([1,2])
data2 = np.ones(2)
print(data1,data2)

Out:

[1 2] [1. 1.]

In:

#数组间加减乘除
jia = data1+data2
jian = data1-data2
cheng = data1*data2
chu = data1/data2
#数组与单个数值的操作
shuzhi1 = data1*100
shuzhi2 = data1/100
print(jia,jian,cheng,chu,shuzhi1,shuzhi2)

Out:

[2. 3.] [0. 1.] [1. 2.] [1. 2.] [100 200] [0.01 0.02]

数组切片

In:

#类似列表操作进行索引和切片
data3 = np.array([1,2,3,4,5])
print(data3)
print(data3[0])
print(data3[2:4])
print(data3[2:])
print(data3[:4])

Out:

[1 2 3 4 5]
1
[3 4]
[3 4 5]
[1 2 3 4]

聚合函数

In:

data4 = np.array([1,2,3,4,5])
print(data4.max()) #最大值
print(data4.min()) #最小值
print(data4.mean()) #均值
print(data4.sum()) #求和
print(data4.std()) #标准差

Out:

5
1
3.0
15
1.4142135623730951

矩阵操作

创建矩阵

In:

#方法一、通过将二维列表传给Numpy来创建矩阵
print(np.array([[1,2],[3,4]]))
#方法二、传入一个元组来描述矩阵的维度
print(np.ones((3,2))) #3行2列矩阵
print(np.zeros((3,2))) 
print(np.random.random((3,2))) 

Out:

[[1 2]
 [3 4]]
[[1. 1.]
 [1. 1.]
 [1. 1.]]
[[0. 0.]
 [0. 0.]
 [0. 0.]]
[[0.2928769  0.24093443]
 [0.06189287 0.62359846]
 [0.80539105 0.81706549]]

矩阵运算

In:

#相同大小矩阵的加减乘除
data5 = np.array([[1,2],[3,4]])
data6 = np.ones((2,2))
jia1 = data5 + data6
cheng1 = data5 * data6
print(jia1,'\n',cheng1)

Out:

[[2. 3.]
 [4. 5.]] 
 [[1. 2.]
 [3. 4.]]

In:

#不同大小矩阵的加减乘除(仅两个矩阵秩数为1时)
data7 = np.array([[1,2],[3,4],[5,6]])
data8_1 = np.ones((1,2)) #行秩为1
data8_2 = np.ones((3,1)) #列秩为1
print(data7 + data8_1)
print('-'*20)
print(data7 + data8_2)

Out:

[[2. 3.]
 [4. 5.]
 [6. 7.]]
--------------------
[[2. 3.]
 [4. 5.]
 [6. 7.]]

In:

#矩阵乘法,dot()方法
data9 = np.array([[1,2,3]]) #1*3的矩阵
data10 = np.array([[1,2],[3,4],[5,6]]) #3*2的矩阵
data11 = data9.dot(data10) #1*2的矩阵
print(data11)

Out:

[[22 28]]

矩阵切片和聚合

In:

#可以在不同维度上使用索引操作来对数据进行切片
data12 = np.array([[1,2],[3,4],[5,6]])
print(data12)
print(data12[0,1]) #1行2列数据
print(data12[1:3]) #2-3行
print(data12[0:2,0]) #1-2行,1列

Out:

[[1 2]
 [3 4]
 [5 6]]
2
[[3 4]
 [5 6]]
[1 3]

In:

#可以像聚合向量一样聚合矩阵
print(data12.max())
print(data12.min())
print(data12.sum())
print(data12.mean())
print(data12.std())
#还可以使用axis参数指定行和列的聚合
print(data12.max(axis = 0)) #纵向执行
print(data12.max(axis = 1)) #横向执行

Out:

6
1
21
3.5
1.707825127659933
[5 6]
[2 4 6]

矩阵转置和重构

In:

#NumPy数组的属性T可用于获取矩阵的转置
print('转置前:\n',data12)
print('转置后:\n',data12.T)

Out:

转置前:
 [[1 2]
 [3 4]
 [5 6]]
转置后:
 [[1 3 5]
 [2 4 6]]

In:

#在较为复杂的用例中,可能需要使用NumPy的reshape()方法改变某个矩阵的维度
data13 = np.array([1,2,3,4,5,6])
print('重构前:\n',data13)
print('重构后:\n',data13.reshape(2,3))
print('重构后:\n',data13.reshape(3,2))

Out:

重构前:
 [1 2 3 4 5 6]
重构后:
 [[1 2 3]
 [4 5 6]]
重构后:
 [[1 2]
 [3 4]
 [5 6]]

In:

#上文中的所有功能都适用于多维数据,其中心数据结构称为ndarray(N维数组)
data14 = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(data14)
print('-'*20)
#改变维度只需在NumPy函数的参数中添加一个逗号和维度
print(np.ones((4,3,2)))
print('-'*20)
print(np.zeros((4,3,2)))
print('-'*20)
print(np.random.random((4,3,2)))

Out:

[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
--------------------
[[[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]]
--------------------
[[[0. 0.]
  [0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]
  [0. 0.]]]
--------------------
[[[0.37593802 0.42651876]
  [0.74639264 0.19783467]
  [0.787414   0.63820259]]

 [[0.84871262 0.46467497]
  [0.54633954 0.4376995 ]
  [0.71988166 0.9306682 ]]

 [[0.6384108  0.74196991]
  [0.73857164 0.38450555]
  [0.68579442 0.64018511]]

 [[0.60382775 0.35889667]
  [0.8625612  0.86523028]
  [0.83701853 0.08289658]]]

公式应用


In:

#在NumPy中可以很容易地实现均方误差。
np_1 = np.ones(3)
np_2 = np.array([1,2,3])
error = (1/3) * np.sum(np.square(np_1 - np_2))
print(error)

Out:

1.6666666666666665

表示日常数据

电子表格和数据表

音频和时间序列

图像

黑白图像

彩色图像

结 语

欢迎关注菜J学Python,我们坚持认真写Python基础,有趣写Python实战。你可在公众号后台免费领取相关学习资料或学习交流。

◆ ◆ ◆  ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值