科学计算库numpy的基础知识总结——学习笔记

本章总结了关于Nuumpy模块的基本用法和常用函数

有详细的注释

import numpy as np
import re

import pandas as pd
####数组的基本操作####
arr1 = np.array([1,2,3,4])# 创建一个数组
print(type(arr1)) # 查看数据格式
arr1.shape # 查看数组结构

# 将列表转换为数组
a_list = [1,2,3,4,5]
a_arr2 = np.array(a_list)
print(type(a_list))
print('**'*30)
print(a_arr2.dtype) # 数据类型
print(a_arr2.size) # 查看元素个数
print(a_arr2.ndim) # 查看维度

####索引与切片####
# 数组索引
print(a_arr2[1:3]) # 注意是左闭右开,取不到索引为3的元素
print(a_arr2[-2:]) # 负数表示从倒数第2位开始取到最后。

a_arr3 = np.array([[1,2,3],[2,3,10],[1,34,4]])
print(a_arr3)
print(a_arr3[1,2]) # 取第2行,第3列 的元素 10 
a_arr3[1,2] = 100 # 将该位置的10元素,重新赋值为100
print(a_arr3)
print(a_arr3[1:]) # 取第2行的全部数据
print(a_arr3[:,1]) # 取第2列的全部数据

# bool索引
a_arr4 = np.arange(0,100,10) # 创建数组与 range函数差不多
print(a_arr4)
a_arr5 = np.array([0,1,1,0,0,0,0,0,1,2],dtype=bool) # 创建布尔类型的数组。注意最后一个数2,只要非0,就返回真
print(a_arr5)
print(a_arr4[a_arr5]) # 根据布尔索引类型返回数据

random_arr = np.random.rand(10) # 创建随机数组
mask = random_arr > 0.5 # 指定条件
print(mask)
print(random_arr[mask]) # bool索引取值

# 数组对比判断
x = np.array([1,1,1,1,4])
y = np.array([1,1,1,1,5])
print(x == y)
print(np.logical_and(x,y))
print(np.logical_not(x,y))
print(np.logical_or(x,y))

# 数值运算
print(np.sum(x))
a_arr3 = np.array([[1,2,3],[2,3,10],[1,34,4]])
print(a_arr3)
print(np.sum(a_arr3,axis=0)) # 行求和,是竖着的哦!!!!axis = 1列求和,是水平的哦

# 数值运算扩展
print(a_arr3.prod()) # 累乘
print(a_arr3.min(axis=1)) # 求水平的最小值
# 类似的还有mean,std,var,clip,round
# 特别注意是clip
print(a_arr3.clip(2,4))
"""
解读:比2小的全部变为2,比4大的全部变为4,中间部分不变
"""
# 四舍五入
a_arr6 = np.array([1.011,2.3145,1.122,4.3122,8.7825],dtype=np.float32)
print(a_arr6.round(decimals=2))
# 如果位数不够,不执行操作

# 寻找最大值最小值位置
print(a_arr6.argmax()) # 对应的有min()

# 排序
print(np.sort(a_arr6))
print(np.argsort(a_arr6)) # 返回排序后原先的位置索引

a_arr7 = np.linspace(0,10,10) # 在0-10之间产生等间隔产生10个数。
values = np.array([2.12,12,1])
print(np.searchsorted(a_arr7,values))

####数组形状的操作##########
a_arr8 = np.arange(10)
print(a_arr8)
print(a_arr8.shape)
a_arr8.shape = 2,5
print(a_arr8)

# 新增数据维度
a_arr9 = np.arange(10)
a_arr9 = a_arr9[np.newaxis,:]
print(a_arr9.shape)

# 数组压缩
print(a_arr9.squeeze())
print(a_arr9.flatten())

# 数组转置transpose
print(a_arr9.transpose()) # 也可以a_arr9.T
# 注意实际并没有对原数组进行处理

####数组的拼接############## 
a = np.arange(10).reshape((2,5))
b = np.arange(20,30,1).reshape((2,5))

print(np.concatenate((a,b),axis=1)) # 默认是竖直拼接
print('//'*30)
print(np.stack((a,b))) # 拼接会增加一个维度
print(np.vstack((a,b))) # 竖直  axis = 0
print(np.hstack((a,b))) # 水平 axis = 1

## 创建数组
print(np.arange(1,10,1,dtype = np.float32).reshape((3,3)))
print(np.logspace(0,1,5)) # 默认是10为底
# 快速创建行列向量
print(np.r_[0:5:1])
print(np.c_[0:5:1])
# 创建0矩阵
print(np.zeros((3,3),dtype=np.int32))
# 创建单位矩阵或者任意矩阵后面乘以数值即可
print(np.ones((3,3)))
# 创建空矩阵
a = np.empty((3,3))
a.fill(22) # 用22填充
print(a)
# 生成一个类似的数组
print(np.zeros_like(a))
# 生成一个对角矩阵
print(np.identity(5))
# np.diag() # 参见diag用法。
print(help(np.diag)) # 查看用法

# 随机模块
print(np.random.rand(3,2))
print(np.random.randint(10,size=(5,4)))
print(np.random.randint(0,10,3))
print(np.random.rand())
# 随机产生高斯分布(正态)
print(np.random.normal(0,1,10)) # 均值为0,方差为1,的10个数
# 全局指定小数精度
np.set_printoptions(precision=2)
print(np.random.normal(0,1,10))

# 数据清洗-洗牌
a_arr10 = np.arange(10)
print(a_arr10)
np.random.shuffle(a_arr10)
print(a_arr10)

# 种子
np.random.seed(0)
a = np.random.normal(0,1,12).reshape((3,4))
print(a)

# 文件读写

def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表.
    file = open(filename,'a')
    for i in range(len(data)):
        s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择
        s = s.replace("'",'').replace(',','') +'\n'   #去除单引号,逗号,每行末尾追加换行符
        file.write(s)
    file.close()
    print("保存文件成功")
text_save('Ceshi.txt',a)

# 读取
data = []
with open('Ceshi.txt') as f :
    for line in f.readlines():
        fileds = line.split()
        cur_data = [float(x) for x in fileds]
        data.append(cur_data)
data = np.array(data,dtype=np.float32)
print(data)
data = np.loadtxt('Ceshi.txt')
print('-'*30)
print(data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wency(王斯-CUEB)

我不是要饭的

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

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

打赏作者

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

抵扣说明:

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

余额充值