数据分析的神器一Numpy的详细介绍

56 篇文章 0 订阅
22 篇文章 0 订阅

第十七讲

请一定要事先安装好anaconda并且在控制中心输入jupyter notebook进入编译环境!

numpy的使用

主要用于数据处理的基础方法

数组和列表的区别

数组要求数据类型保持一致,列表没有强制要求

# 导入模块并且重命名  当然重命名为npy也可以
import numpy as np
# 查看版本
np.__version__
# 构造数组
np.array([1,2,3,4,5])
# 二维数组结构构造
np.array([[1,2,3],[3,4,5]])

其实我们还有更多便捷的方式去构造数组去实现我们的需求

shift+tab键可以将说明文档展开

# 可以用元组的方式来表达数组的行列个数
# ones表示用1填充,zeros表示用1填充
np.ones(shape=(3,2,3))

那如果我们用其他数字填充改怎么办呢

一直用英文开头显然不现实也不全面

# 指定数组样式并指定填充数字
np.full(shape=(2,4,3),fill_value=6)

但是我们的代码不可能每次都是知道填充啥,我们需要引入随机数的概念

# 下面代码表示生成从1到10的随机数填充进2行3列的二维数组中
np.random.randint(1,10,size=(2,3))
# 下面代码表示生从0-1的浮点数填充到5行5列的数组中
np.random.random(size=(5,5))
# 下面代码表示从0到10生成含有26个数的等差数列
np.linspace(0,10,26)
# 下面代码表示从0到10,步长为1的数组数据
np.arange(0,10,1)

Numpy数组的访问问题

# 访问格式 array[index]
array = np.arange(0,10,1)
array[0]
# 这里我们可以看出数组的访问形式和列表的访问形式是一样的

但是数组有着更加强大的功能和操作

# 列表数组共有操作 切片
array[1:4]
# 数组可以将列表作为索引也就是index
array[[0,1,2,3]]

这其中的妙用不仅仅是可以定向选择输出我们想要的数据,而且可以实现数组重排列

这样我们有一个基础的元数组我们就可以不断衍生出新的数组,减少重复代码重复思考

array1 = array[[0,1,0,1,0,1,0,1,0,1,0,1]]
print(array1)

高级索引技巧

用布尔列表定向获取数据

# 生成一个简单点的数组,我们想要的就在他对应的方位用true不想要的用false,同理我们也可以联想到这样的方法也可以构造新的数组
array1 = np.array([1,2,3,4,5])
array1[[True,False,True,True,False]]

广播运算

array1 = np.array([1,2,3,4,5])
array1 > 3

输出结果为

array([False, False, False,  True,  True])

我们还可以实现更加高级的设想

如果我们将广播运算中的广播放入索引当中呢

array = np.array([1,2,3,4,5,6,7,8,9,10,105])
array1 = array[array>8]
print(array1)

输出结果为

[  9  10 105]

那么高维数组我们该如何实现呢

array2 = np.random.randint(1,10,size=(3,3))
# 输出array2所有元素
array2
# 输出array2中的第一行第一列
array2[0][0]
array[0,0]

Numpy数组的运算

arr1 = np.array([1,2,3])
arr2 = np.array([[1],[2],[3]])
arr1+arr2

结果是

array([[2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])
本质是
1 2 3    1 1 1
1 2 3    2 2 2
1 2 3    3 3 3

两大运算潜规则

  1. 缺失维度自动补充
  2. 缺失数据用已有的值填充

但是存在特殊情况

arr1 = np.array([1,2,3])
arr2 = np.array([[1,2],[2,2]])
# display()用来快捷输出
display(arr1,arr2)
# 因为这时候arr2如果要扩展一列不知道如何扩展,我们如果再执行arr1+arr2就会报错

报错信息

ValueError                                Traceback (most recent call last)
<ipython-input-79-e489ba1ad4d1> in <module>
----> 1 arr1+arr2

ValueError: operands could not be broadcast together with shapes (3,) (2,2)

Numpy排序方法

data = np.random.permutation(10)
data
# 生成10个索引
data.sort()
data
# 实现重排 从小到大

但这种排序方法原有的data结构会被破坏,我们一般采取别的方法,即既保留data结构又可以实现重排

data = np.random.permutation(10)
data
np.sort(data)
data

Numpy的拷贝方法

我们除了使用上述方法排序外,我们也可以拷贝原数据然后再更改拷贝数据,也能实现一样的效果

data = np.random.permutation(10)
data
c_date = data.copy()
c_date
c_date.sort()
c_date
data

Numpy的级联方法

# 创建俩个数组
arr1 = np.random.randint(1,10,size=(3,2))
arr2 = np.random.randint(11,20,size=(3,3))
# 第一个括号是放入我们要进行操作的数组,axis=0表示纵向级联,axis=1表示横向级联,默认为0
np.concatenate((arr1,arr2),axis=1)

级联方法在业务处理上有关键作用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宴师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值