numpy认识

1:什么是numpy:

        一个在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于大型多维数组上执行数值运算。

2:创建数组:

import numpy as np

t1 = np.array([1,2,3,])
print(t1)

t2 = np.array(range(10))
print(t2)

t3 = np.arange(12)
print(t3)

3:ndarray对象特性:

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。

  • 数据类型或 dtype,描述在数组中的固定大小值的格子。

  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。如果列表只有一行,a.shape,表示元素个数是一个元祖(12,),如果不只一行,表示的是纬度,几行几列,也是一个元祖(2,3)

  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

2:flatten()将多位数组展开成一维数组。reshape(行,列),数组纬度间转换。

3:数组间的运算:

二维:只要是行或者列能一致就能进行运算,三维数组,前两个或者后边两个一致就可以进行运算

4:numpy的轴:

在numpy中可以理解为方向,使用0,1,2。。。数字表示,对于一个一维数组,只有一个0轴,对于二维数组(shape(2,2)),有0轴和1轴,对于三维数组shape(2,2,3),有0,1,2轴。计算一个2维数组的平均值必须指定是计算哪个方向上的平均值。

二维:0轴是x轴方向,1轴表示的是y轴的反方向;三维:0轴是z轴的反方向,表示块,1轴是x轴正方向,2轴是y的反方向。

5:numpy读取数据:

CSV:Comma-Separated Value, 逗号分割值文件。由于csv便于展示,读取和写入,所以很多地方用csv的格式存储和传输中小型的数据。

显示:表格状态

源文件:换行和逗号分割行列的格式化文本,每一行数据表示一条记录。

numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')

  • fname:文件名/文件路径,如果文件后缀是.gz.bz2,文件将被解压,然后再载入
  • dtype:将读出来的数据指定成什么类型
  • comments:文件头部或者尾部字符串的开头字符,用于识别头部,尾部字符串
  • delimiter:划分读取上来值的字符串,默认是空格,csv要改成逗号
  • converters:数据行之间的分隔符
  • skiprows:跳过哪一行
  • usecols:读取指定的列,索引,元祖类型
  • unpack:如果是True,读入的属性分别写入不同数组变量,False读入的数据只写入一个数组变量,默认是False。相当于顺时针旋转180度,将原来的行转成列,即转置。

6:二维数组转置:

a1 = np.array(range(24)).reshape((2,12))
print(a1)
# 转置
a2 = a1.transpose()
print(a2)

a3 = a1.swapaxes(1, 0)  # 0轴跟1轴交换
print(a3)

a4 = a1.T
print(a4)

7:二维数组的切片

print(t2[2])  # 取行  print(t2[2, :])
print(t2[2:])  # 取连续几行 print(t2[2:, :])
print(t2[[1, 3]])  # 取不连续几行print(t2[[2,1], :])

# 取一行就是一维,取多行将会是多行,几列,还是二维

# []中逗号前是取行,逗号后是取列
print(t2[:, 1])  # 取第一列
print(t2[:, 1:])
print(t2[:, [1, 3]])  # 取第一列跟第三列


#取多行多列
print(t2[1, 2])  # 结果是一个数,但是是64位的类型
print(t2[1:3, 2:3])  # 取第2到3行,第3列的数
print(t2[[0, 1], [1, 2]])  # 取的是第一行第二列跟第二行第三列的值

8:numpy中数值修改


# 布尔索引
print(t2[t2<4000])  # [2124 3523 3465 3424 1213 2514 3422 1242]  赋值直接=0即可

# 三元运算符where
print(np.where(t2<2000, 0, 100))  # 条件成立赋值0,不成立赋值100

#裁剪clip
print(t2.clip(2000, 4000)) # 小于2000替换成2000,大于4000换成了4000


#赋值成为nan
t2 = t2.astype(float)  # nan是个float类型
t2[3,3] = np.nan
print(t2)

9:数组的拼接

np.vatack((t1, t2))  # 竖直拼接

np.hstack((t1,t2))  # 水平拼接

10:数组行列交换

注意点:竖直拼接的时候:每一列的意义相同,否则牛头不对马嘴。

t[[1, 2], :] = t[[2, 1], :] # 行交换
print(t)

t[:, [1,2]] = t[:, [2,1]]  # 列交换
print(t)

11:numpy更加好用的方法

# 创建全为0的全为1的数组
zero_data = np.zeros((t.shape[0], 1)).astype(int)
one_data = np.ones((t.shape[0], 1)).astype(int)
print(zero_data)
print(one_data)

# 矩阵对角线为1,其他为0
u = np.eye(10).astype(int)
print(u)


print(np.argmax(u, axis=0))  # 每一行上最大值的位置
t[u == 1] = -1
print(np.argmin(u, axis=0))  # 每一行上最大值的位置


统计多少:np.count_nonzero(u) 统计u 中不是0的个数
np.sum(u, axis=0)没有指定axis时求所有数值的和,当等于0时分别求没列的和,当等于1时,分别求每一行的和。

12:numpy生成随机数

函数名称函数功能参数说明
rand(d0, d1, …, dn)产生均匀分布的随机数dn为第n维数据的维度
randn(d0, d1, …, dn)产生标准正态分布随机数dn为第n维数据的维度
randint(low[, high, size, dtype])产生随机整数low:最小值;high:最大值;size:数据个数
random_sample([size])在[0,1)内产生随机数size:随机数的shape,可以为元祖或者列表,[2,3]表示2维随机数,维度为(2,3)
random([size])同random_sample([size])同random_sample([size])
ranf([size])同random_sample([size])同random_sample([size])
sample([size]))同random_sample([size])同random_sample([size])
choice(a[, size, replace, p])从a中随机选择指定数据a:1维数组 size:返回数据形状
bytes(length)返回随机位length:位的长度

 

13:numpy的注意点copy和view

a = b 完全不复制,a与b相互影响

a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的。

a = b.copy(),复制,a与b互不影响

14:numpy中的nan和inf

什么时候会出现nan:

1)当我们读取一个本地的文件为float的时候,如果有缺失,就会出现nan,因为nan是float类型

2)当做了一个不合适的计算的时候,0/0或者无穷大减去无穷大

什么时候出现inf:(inf表示正无穷,-inf表示负无穷)

1)一个数除以0(python会出现报错,numpy中是一个inf或者-inf),inf也是float类型。

15:nan属性:

  • 两个nan不相等
  • np.nan != np.nan
  • 利用以上特性,判断数组中nan的个数np.count_nonzero(t!=t)=np.count_nonzero(np.isana(t2))统计t中nan的个数
  • 由于2,通过np.isnan(a)来判断,返回bool类型
  • nan与任何值的运算都是nan

注意点:nan在计算时不能单纯的忽略直接赋值成0,一般情况下会是将却是的值替换为均值(中值),或者是直接删除有缺失值的哪一行。

16:numpy中常用的函数:

求和:t.sum(axis=None)

均值:t.mean(a,axis=None)受离群点的影响较大

中值:np.median(t,axis=None)

最大值:t.max(axis=None)

最小值:t.min(axis=None)

极值:np.ptp(t,axis=None)

标准差:t.std(axis=None)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值