科学计算库 Numpy

科学计算库 Numpy

一、Numpy基本操作

数组特性

array.shape # 查看数组的shape属性
type(array) # 打印当前数据格式
array.dtype # 打印当前数据类型
array.size # 打印当前数组中元素个数
array.ndim # 打印当前数据维度

二、数据类型与数值计算

# 各个元素累乘
tang_array.prod()
tang_array.prod(axis=0)
tang_array.prod(axis=1)
# 求各元素中的最小值
tang_array.min()
tang_array.min(axis=0)
tang_array.min(axis=1)
# 求均值
tang_array.mean()
tang_array.mean(axis=0)
# 求标准差
tang_array.std()
tang_array.std(axis=1)
# 求方差
tang_array.var()
# 比2小的全部为2,比4大的全部为4
tang_array.clip(2,4)
# 四舍五入
tang_array = np.array([1.2, 3.56, 6.41])
tang_array.round()
# 还有指定一个精度
tang_array.round(decimals=1)
# 得到的是索引位置
tang_array.argmin()
# 也可以按照指定的维度来确定最小值的位置
tang_array.argmin(axis=0)
tang_array.argmin(axis=1)

在学习过程中一定要养成勤查文档的习惯,其中最权威、最有学习价值的就是工具包官方文档。但是,面对这么多函数和参数,想要将其全部背下来是不可能的,因此,反复查阅的过程也是学习进步的过程。

help(想要查询的API文档)

三、常用功能模块

tang_array = np.array([[1.5, 1.3, 7.5], [5.6, 7.8, 1.2]])
# 排序
np.sort(tang_array)
# 排序也可以指定维度
np.sort(tang_array, axis=0)
# 排序后,用元素的索引位置代替排序后的实际结果
np.argsort(tang_array)

再创建一个数组,如果此时又新增一组数据,想要按照大小顺序把他们插入刚创建的数组中。

tang_array = np.linspace(0, 10, 10) # 在0~10之间生成等间隔的10个数
values = np.array([2.5, 6.5, 9.5])
# 算好合适的位置
np.searchsorted(tang_array, values)

将数据按照第一列的升序或者降序对整体数据进行排序:

tang_array = np.array([[1, 0, 6], [1, 7, 0], [2, 3, 1], [2, 4, 0]])
# 降序
index = np.lexsort([-1*tang_array[:, 0]])
# 升序
index = np.lexsort([tang_array[:, 0]])

数组形状操作

# 创建一个数组,默认从0开始,arange()函数的结果经常可以作为索引。
tang_array = np.arange(10)   
# 增加维度
tang_array = tang_array[np.newaxis,:]
# 对数组进行压缩,把多余的维度去掉
tang_array = tang_array.squeeze()
# 对数组进行转置
tang_array.transpose()
tang_array.T

数组的拼接

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
np.concatenate((a, b))
np.concatenate((a, b), axis=1)

# 另外一种拼接方法
d = np.array([1, 2, 3])
e = np.array([2, 3, 4])
np.stack((d, e))

类似的还有hstack和vstack操作,分别表示水平和竖直的拼接方式。
对于多维数组,还可以用array.flatten()将数组拉直。

创建数组函数

# 表示创建零矩阵,里面包含3个元素
np.zeros(3)
# 注意下面有两个括号的,传入的参数是(3,3),表示创建3X3的零矩阵
np.zeros((3, 3))
# 表示创建单位矩阵,用法和zeros是一样的
np.ones((3, 3))
# 根据我们的需求来进行组合变换即可 
np.ones((3,3)) * 8
# 也可以先创建一个空的, 指定好其大小, 然后往里面填充值 
a = np.empty(6) 
# 用数值 1 来进行填充 
a.fill(1)
# 先创建好一个数组 
tang_array = np.array([1,2,3,4]) 
# 初始化一个零矩阵, 让它和某个数组的维度一致 
np.zeros_like(tang_array)
# 只有对角线有数值, 并且为 1 
np.identity(5)

随机模块

初始化参数、切分数据集、随机采样等操作都会用到随机模块:

# 其中 (3,2) 表示构建矩阵的大小 
np.random.rand(3,2)
# 返回区间 [0,10) 的随机的整数 
np.random.randint(10,size = (5,4))
# 如果只想返回一个随机值 
np.random.rand()

# 也可以自己指定区间并选择随机的个数 
np.random.randint(0,10,3)
# 符合均值为 0, 标准差为 0.1 的高斯分布的随机数 
np.random.normal(mu,sigma,10)
# 可以进行全局的设置, 来控制结果的输出 
np.set_printoptions(precision = 2) 
np.random.normal(mu,sigma,10)

tang_array = np.arange(10) 
# 每次执行的结果都是不一样的 
np.random.shuffle(tang_array)

随机种子可以实现进行随机操作,但每次的随机结果都相同。这里每次都把种子设置成100,说明随机策略相同,无论执行多少次随机操作,其结果都是相同的。不同的种子,结果是完全不同的。
在对数据进行预处理时,经常加入新的操作或改变处理策略,此时如果伴随着随机操作,最好还是指定唯一的随机种子,避免由于随机的差异对结果产生影响。

np.random.seed(100) 
np.random.normal(mu,sigma,10)

文件读写

# Notebook的魔法指令,相当于写了一个文件
%%writefile tang.txt
1 2 3 4 5 6
2 3 5 8 7 9

如果用Python来读取数据:

data = []
with open('tang.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)

Numpy只需要一行就完成上述操作:

data = np.loadtxt('tang.txt')

如果数据中带有分隔符:

%%writefile tang2.txt
1,2,3,4,5,6
2,3,5,8,7,9
data = np.loadtxt('tang2.txt', delimiter=',')

加入无关项:

%%writefile tang2.txt
x,y,z,w,a,b
1,2,3,4,5,6
2,3,5,8,7,9
# 可以指定去掉前几行
data = np.loadtxt('tang2.txt', delimiter = ',', skiprows = 1)

还可以将数据写入文件中:

np.savetxt('tang4.txt',tang_array,fmt='%d',delimiter = ',')

在numpy中还有一种“.npy”格式,也就是把数据保存成ndarray的格式,这种方法非常实用,可以把程序运行结果保存下来,再次使用的时候直接加载就好,非常便捷。

tang_array = np.array([[1,2,3],[4,5,6]]) 
# 把结果保存成 npy 格式 
np.save('tang_array.npy',tang_array) 
# 读取之前保存的结果, 依旧是 Numpy 的数组格式。 
np.load('tang_array.npy')

要想查看保存的文件放在哪,可以在notebook中输入下列代码:

import os
os.path.abspath('.')
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值