python-32-NumPy的常用操作

参考Numpy - 知识点总结(五)
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 是一个开源的 Python 算法库和数学工具包。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

1 NumPy Ndarray 对象

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

2 NumPy 数组属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。
比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。
所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。
而轴的数量——秩,就是数组的维数。

很多时候可以声明 axis。
axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;
axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

通过在轴(axis=0)上的坐标和轴(axis=1)上的坐标来确定它们的位置。
[[1 2 3]
[4 5 6]
[7 8 9]]
python-32-NumPy的常用操作_第1张图片

import numpy as np 
a = np.arange(24)  
print(a)
print (a.ndim)      # a 现只有一个维度
# 现在调整其大小
b = a.reshape(4,6)  # b 现在拥有二个维度
print(b)
print (b.ndim)

python-32-NumPy的常用操作_第2张图片
NumPy 的数组中比较重要 ndarray 对象属性有:

print(b.ndim)  # 秩,即轴的数量或维度的数量
print(b.shape)  # 数组的维度,对于矩阵,n行m列
print(b.size)  # 数组元素的总个数,相当于.shape中n*m的值
print(b.dtype)  # 对象中元素类型
print(b.itemsize)  # 对象中每个元素的大小,以字节为单位
print(b.flags)  #  对象的内存信息
print(b.real)  # 元素的实部
print(b.imag)  # 元素的虚部

3 Numpy 数组操作

3.1 修改数组形状

numpy.reshape(arr, newshape, order=‘C’) 默认按行

import numpy as np
a = np.arange(8)
print(a)
b = a.reshape(4,2)
print(b)

python-32-NumPy的常用操作_第3张图片

a.reshape()  # 不改变数据的条件下修改形状
b.flat  # 数组元素迭代器
b.flatten()  # 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
b.ravel()  # 返回展开数组

3.2 翻转数组

3.3 修改数组维度

3.4 连接数组

import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])

print(np.concatenate((a,b)))  # 沿轴0连接两个数组
print(np.concatenate((a,b),axis = 1))  # 沿轴1连接两个数组

3.5 分割数组

3.6 数组元素的添加与删除

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.resize(a, (3,2))  # 返回指定大小的新数组,原数组不变
a.resize(3,2)  # 改变原数组为指定大小的新数组,

a = np.array([[1,2,3],[4,5,6]])
print(np.append(a, [7,8,9]))  # 在数组的末尾添加值,原数组不变。
print(np.append(a, [[7,8,9]],axis = 0))  # 在数组的末尾添加值,沿轴0添加元素,原数组不变

b = np.insert(a,3,[11,12])  # 未传递Axis参数,在插入之前输入数组会被展开,原数组不变

print(np.delete(a,5))  # 删除指定索引处的值

u,indices = np.unique(a, return_index=True)  # 去除数组中的重复元素

4 NumPy 统计函数

import numpy as np 
a = np.array([[3,7,5],[8,4,3],[2,4,9]])  
print(a)

python-32-NumPy的常用操作_第4张图片
如果提供了轴,则沿其计算。

print(np.amin(a))  # 用于计算数组中的元素沿指定轴的最小值。
print(np.amax(a))  # 用于计算数组中的元素沿指定轴的最大值。
print(np.ptp(a))  # 函数计算数组中元素最大值与最小值的差(最大值-最小值)。
print(np.percentile(a,60))  # 统计百分位数。
print(np.median(a))  # 计算中位数。
print(np.mean(a))  # 算术平均值。
print(np.average(a))  # 加权平均值。
print(np.std(a))  # 标准差。
print(np.var(a))  # 方差。

5 NumPy 算术函数

import numpy as np 
a = np.array([[3.,7,5],[8,4,3],[2,4,9]])  
print(a)

python-32-NumPy的常用操作_第5张图片

print(np.amin(a))  # 用于计算数组中的元素沿指定轴的最小值。
print(np.amax(a))  # 用于计算数组中的元素沿指定轴的最大值。
print(np.ptp(a))  # 函数计算数组中元素最大值与最小值的差(最大值-最小值)。
print(np.percentile(a,60))  # 统计百分位数。
print(np.median(a))  # 计算中位数。
print(np.mean(a))  # 算术平均值。
print(np.average(a))  # 加权平均值。
print(np.std(a))  # 标准差。
print(np.var(a))  # 方差。

6 NumPy 字符串函数

对数组执行向量化字符串操作。
这些函数在字符数组类(numpy.char)中定义。

import numpy as np
print(np.char.add(["he","wor"],["llo","ld"]))  # 对两个数组的逐个字符串元素进行连接
print(np.char.multiply('Runoob',3))  # 返回按元素多重连接后的字符串
print(np.char.center('Runoob', 20,fillchar = '*'))  # 将字符串居中,并使用指定字符在左侧和右侧进行填充。
print(np.char.capitalize('runoob'))  # 将字符串第一个字母转换为大写
print(np.char.title('i like runoob'))  # 将字符串的每个单词的第一个字母转换为大写
print(np.char.lower(['RUNOOB','GOOGLE']))  # 转换为小写,操作数组
print(np.char.lower('RUNOOB'))  # 转换为小写,操作字符串
print(np.char.upper(['runoob','google']))  # 转换为大写,操作数组
print(np.char.upper('runoob'))  # 转换为大写,操作字符串
print(np.char.split ('i like runoob?'))  # 对字符串进行分割,分隔符默认为空格
print(np.char.split ('www.runoob.com', sep = '.'))  # 对字符串进行分割,指定分隔符
print(np.char.splitlines('i\nlike runoob?'))   # 以换行符分割
print(np.char.strip('ashok arunooba','a'))  # 移除元素开头或者结尾处的特定字符
print(np.char.strip(['arunooba','admin','java'],'a'))  # 移除元素开头或者结尾处的特定字符
print(np.char.join(':','runoob'))  # 拼接,操作字符串
print(np.char.join([':','-'],['runoob','google']))  # 拼接,指定多个分隔符操作数组元素
print(np.char.replace ('i like runoob', 'oo', 'cc'))  # 使用新字符串替换字符串中的所有子字符串
a = np.char.encode('runoob')  # 默认编码是 utf-8 
print(a)
print(np.char.decode(a)) # 解码

7 NumPy 排序和条件筛选函数

每个排序算法的特征在于执行速度,最坏情况性能。
python-32-NumPy的常用操作_第6张图片

import numpy as np  
a = np.array([3,  1,  2]) 
print(a)
print(np.sort(a))  # 返回输入数组的排序副本
print(np.argsort(a))  # 返回的是数组值从小到大的索引值
print(np.argmax(a))  # 返回最大元素的索引
print(np.argmin(a))  # 返回最小元素的索引
print(np.nonzero(a))  # 返回非零元素的索引
print(np.where(a>1))  # 返回输入数组中满足给定条件的元素的索引
print(np.extract(a>1, a))  # 根据某个条件从数组中抽取元素,返回满条件的元素

8 除0的问题inf和nan

(1)直接报错

a = 10
b = 0
c = a/b
print(c)

python-32-NumPy的常用操作_第7张图片
(2)numpy中的0除0得nan

import numpy as np
a = np.array([0])
b = np.array([0])
c= a/b
print(c)
print(c<10,c>10,c==10)
输出警告信息
RuntimeWarning: invalid value encountered in true_divide

python-32-NumPy的常用操作_第8张图片
(3)numpy中的10除0得inf

import numpy as np
a = np.array([10])
b = np.array([0])
c= a/b
print(c)
print(c<10,c>10,c==10)
输出警告信息RuntimeWarning: divide by zero encountered in true_divide。

python-32-NumPy的常用操作_第9张图片

(4)忽略警告的设置

处理runtimewarning:invalid value encountered in divide。
(1)忽略掉异常信息
import numpy as np
np.seterr(divide=‘ignore’, invalid=‘ignore’)
a = np.array([1.0,2.0])
b = np.array([0])
print(a/b)

你可能感兴趣的:(python3,python,开发语言,后端)