numpy的基本应用

numpy

数组的形状

import numpy as nu

t1 = nu.arange(12)
print(t1)
print(t1.shape)
print(t1.reshape((2, 3, 2)))
# shape方法获得数组形状
# reshape方法改变数组形状,reshape(块数,行数,列数) 有返回值
# reshape((数值,)),将该数组转为一维数组
# flatten()方法快速将数组展开成为一维数组

·数组与数字进行运算时,数组内每个元素都会与其进行运算;
·数组与相同形状数组进行运算时,对应的位置进行运算;
·两个形状不同但行或列相同的数组进行运算时,相同维度进行运算并且向后延展;
·两个形状完全不同的数组不能进行运算。
例子:

t1 = nu.arange(24).reshape(4, 6)
print(t1)
print('================================')
t2 = t1 + 5
print(t2)
print('================================')
t3 = nu.arange(6)
print(t3)
print('===================================')
t4 = t3+t1
print(t4)
print('=================================')
t5 = nu.arange(4).reshape((4,1))
print(t5)
print('==================================')
t6 = t5 + t1
print(t6)

运行结果:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
================================
[[ 5  6  7  8  9 10]
 [11 12 13 14 15 16]
 [17 18 19 20 21 22]
 [23 24 25 26 27 28]]
================================
[0 1 2 3 4 5]
===================================
[[ 0  2  4  6  8 10]
 [ 6  8 10 12 14 16]
 [12 14 16 18 20 22]
 [18 20 22 24 26 28]]
=================================
[[0]
 [1]
 [2]
 [3]]
==================================
[[ 0  1  2  3  4  5]
 [ 7  8  9 10 11 12]
 [14 15 16 17 18 19]
 [21 22 23 24 25 26]]

广播原则
如果两个数组的后缘维度,即从末尾开始算起的维度的轴长度相符1或其中一方的长度为一,则认为他们是广播兼容的,广播会在缺失和长度为一的维度上进行

数组的创建

a = nu.array([1, 2, 3, 4, 5, 6, 7, 8, 9])  # 直接传列表
b = nu.array(range(10))  # 使用numpy生成数组
c = nu.arange(10)
print(c.dtype)  # dtype方法获取数组存放的数据的类型
# astype方法修改数组的数据类型
d = [random.random() for i in range(10)]  # random.random()获取小数

在这里插入图片描述

在numpy中可理解为方向,对于一维数组,只有一个0轴,二维数组有0轴和1轴,对于三维数组有0,1,2轴,二维数组0轴表示行,1轴表示列,三维数组0轴表示块,1轴表示行,2轴表示列
numpy读取数据
CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
在这里插入图片描述
delimiter:指定边界符号是什么,不指定会导致每行数据为一个整体的字符串而报错;
dtype:默认情况下对于较大的数据会将其变为科学计数的方式;
unpack:默认是Flase(0),默认情况下,有多少条数据就会有多少行,为True(1)的情况下,每一列的数据会组成一行,原始数据有多少列,加载出来的数据就会有多少行,转置效果。
转置

a = nu.arange(24).reshape((4, 6))
print(a)
print('*' * 20)
print(a.transpose())  # 转置方法transpose()
print('*' * 20)
print(a.T)  # 转置方法T
print('*' * 20)
print(a.swapaxes(1, 0))  # 将轴进行转置
print('*' * 20)
print(a)

numpy的切片和索引

a = nu.array([random.random() * 100000 for i in range(100)]).reshape((25, 4))
b = a.astype(int)
# print(b)
print('*' * 20)
# 取行
print(b[2])
# 取连续多行
print(b[2:])
# 取不连续的多行
print(b[[1, 3, 5]])
print(b[1, :])  # 逗号前面是行,后面是列,表示取第一行,冒号表示列全都要
print(b[2:, :])  # 取连续的多行
print(b[[2, 4, 5], :])  # 取不连续的多行
# 取列
print(b[:, 3])
# 取连续多列
print(b[:, 2:])
# 取不连续的多列
print(b[:, [0, 3]])
# 取多行和多列,第2行第3列
print(b[2, 3])
# 取第三行到第五行,第一列到第三列的结果 包头不包尾,取得是行和列共同覆盖的值
print(b[2:5, 1:3])
# 取多个不相邻的点
d = b[[3, 1], [2, 2]]  # 结果是(3,1)(2,2)
c = b[[0, 2, 2], [2, 3, 1]]  # 结果是(0,2)(2,3)(2,1)一一对应
print(c)

numpy中数值的修改

b[2:3, :] = 0  # 对其进行赋值
# print(b)
b[b < 5000] = 1  # 将其中小于5000的全部变为1
print(b)
print(b[b > 10000])  # 输出其中大于10000的数

三元运算符
numpy.where(b<x,y,z)三元运算符,b中的数如果小于x则替换成y,如果大于x则换成z
d = b.clip(a,b)(裁剪方法)将b中小于a的替换成a,大于b的替换成b

c = nu.where(b < 5000, 1, 2) # 将b中小于5000的替换成1,大于5000的替换成2
d = b.clip(5000,10000)  # 将小于5000的替换成5000,大于10000的替换成10000
b[3,3] = nu.nan  # 将b[3,3]转为nan

数据的拼接

# 竖直拼接
c = nu.vstack((a, b))  # 每一列代表的意义相同
# 水平拼接
d = nu.hstack((a, b))

数组的行列交换

# 行交换
# a[[1, 2], :] = a[[2, 1], :]
# # 列交换
# a[:, [3, 2]] = a[:, [2, 3]]
获取最大值最小值
```python
获取最大值的位置
nu.argmax(a, axis=0)
获取最小值的位置
nu.argmin(a, axis=0)

创建全为0或全为1的数组

# zeros()方法创建全为0的数组
# ones()方法创建全为1的数组
c = nu.zeros((a.shape[0], 1))  # 创建1列为0的数组
d = nu.ones((b.shape[0], 1))  # 创建1列为1的数组

创建一个对角线为1的正方形数组(方阵)
nu.eye(x) #创建一个x行x列的方阵
在这里插入图片描述
注意:
1.a=b完全不复制,a和b相互影响
2.a=b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
3.a=b,copy(),复制,a和b互不影响

numy中的nan和inf

nan(NAN,Nan):表示的不是一个数字
出现nan的原因:
1.当我们读取本地的文件为float的时候,如果有缺失就会出现nan
2.当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)
注意:
1。两个nan是不相等的
2.nu.nan!=nu.nan
3.利用以上特性,判断数组中nan的个数
nu.count_nonzero(x!=x)
4.nan和任何值计算都为nan
5.通过nu.isnan(x)来判断一个数字是否为nan,返回bool类型
sum()方法
nu.sum(x,axis=0)计算x数组每一列相加的结果
nu.sum(x,axis=1)计算x数组每一行相加的结果
nu.sum(x)计算x数组所有值相加的结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值