Python__模块(M)__numpy

简介

高级数组工具


安装

pip install numpy


文档查询

https://numpy.org/doc/stable/reference/index.html


简单了解

  • Numpy(Numerical Python)
  • Numpy是运行速度非常快的数学库。
  • Numpy是一个多维数组对象,称为ndarray。
  • Numpy是python开源的科学计算工具包,属于高级的数值编程工具。
  • Numpy支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。可以进行线性代数、傅里叶变换、随机数生成等功能的运算。

  • Numpy通常与SciPy(Scientific Python)和Matplotlib(绘图库)一起使用,这种组合广泛用于替代MatLab,是一个强大的科学计算环境。


更多了解

【优势】

  • 创建n维数组(矩阵)。

  • 对数组进行函数运算,使用函数计算十分快速‘节省了大量的时间,且不需要编写循环,十分方便。

  • ndarray快速节省空间的多维数组。

  • 提供数组化的算术运算和高级的广播功能。

【劣势】

  • 对于数值运算来说这种结构比较浪费内存和CPU资源。

【应用】

  • 金融:用于衡量投资组合的风险,通过以往大量的数据对比分析未来走势。

    扫描二维码关注公众号,回复: 17348510 查看本文章
  • 统计分析:评估产值,市场调研某产品适用人群的占比...

  • 质量控制:检测产品尺寸的变化,一些细节的处理,提高产品质量。

  • 数据建模:在机器学习中,评估模型的泛化能力,帮助调整模型。’

【关联模块】

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

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

scipy包含各种专用于科学计算中常见问题的工具箱。其不同的子模块对应不同的应用,如插值、积分、优化、图像处理、统计、特殊函数等。

scipy是 Python 中科学计算的核心包,与numpy组合使用,才能充分的发挥其效果。


参数列表

array

array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None)

object

数组或嵌套的数列

dtype

数组元素的数据类型,可选

copy

对象是否需要复制,可选

order

创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)

subok

默认返回一个与基类类型一致的数组

ndmin

指定生成数组的最小维度

位运算

bitwise_and

对数组元素执行位与操作

bitwise_or

对数组元素执行位或操作

invert

按位取反

left_shift

向左移动二进制表示的位

right_shift

向右移动二进制表示的位

字符串函数

add()

对两个数组的逐个字符串元素进行连接

multiply()

返回按元素多重连接后的字符串

center()

居中字符串

capitalize()

将字符串第一个字母转换为大写

title()

将字符串的每个单词的第一个字母转换为大写

lower()

数组元素转换为小写

upper()

数组元素转换为大写

split()

指定分隔符对字符串进行分割,并返回数组列表

splitlines()

返回元素中的行列表,以换行符分割

strip()

移除元素开头或者结尾处的特定字符

join()

通过指定分隔符来连接数组中的元素

replace()

使用新字符串替换字符串中的所有子字符串


参考代码

数组(基本方法)

import numpy
# 每个数组的长度必须一致
arr = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# print(arr)                                    # >>> [[1 2 3][4 5 6][7 8 9]]
# print(type(arr))                              # >>> <class 'numpy.ndarray'>      
""" 数据类型(获取) """
# print(arr.dtype)                              # >>> int32  
""" 数据类型(设置) """
# print(arr.astype(numpy.int64)) 
""" 几维数组 """
# print(arr.ndim)                               # >>> 2
""" 行列(互换) """
# print(arr.transpose())                        # >>> [[1 4 7][2 5 8][3 6 9]]
# print(arr.T)                                  # >>> [[1 4 7][2 5 8][3 6 9]]
""" 行列(转换) """      
# print(arr.reshape(1,9))                       # >>> [[1 2 3 4 5 6 7 8 9]]
""" 数组维度 """      
# print(arr.shape)                              # >>> (3, 3) # 几行,几列
""" 内存信息 """      
# print(arr.flags)                              # ndarray对象的内存信息。
""" 元素数量 """      
# print(arr.size)                               # >>> 9
""" 字节大小 """      
# print(arr.itemsize)                           # >>> 4   # 每个元素的字节大小
""" 复制数组 """      
# arr_2 = arr.copy()
""" 创建数组 """     
# print(numpy.array(range(5)))                  # >>> [0 1 2 3 4]
# print(numpy.array(range(5),dtype=float))      # >>> [0. 1. 2. 3. 4.]
# print(numpy.arange(5))                        # >>> [0 1 2 3 4]
# print(numpy.arange(0, 10))                    # >>> [0 1 2 3 4 5 6 7 8 9]
# print(numpy.arange(0, 10, 2))                 # >>> [0 2 4 6 8]
""" 等差数列 """     
# print(numpy.linspace(10,15,num=5))            # >>> [10.   11.25 12.5  13.75 15.  ]
# print(numpy.linspace(10,15,num=3))            # >>> [10.  12.5 15. ]
""" 等比数列 """     
# print(numpy.logspace(0,9,num=4))              # >>> [1.e+00 1.e+03 1.e+06 1.e+09]   
# print(numpy.logspace(0,20,num=5))             # >>> [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20] 
""" 单位矩阵 """     
# print(numpy.eye(3,dtype=int))                 # >>> [[1 0 0][0 1 0][0 0 1]]            
""" 排列(严格模式) """     
# print(numpy.reshape(numpy.arange(6),(2,3)))   # >>> [[0 1 2][3 4 5]]  
""" 排列(懒惰模式) """     
# print(numpy.resize(numpy.arange(7),(2,3)))    # >>> [[0 1 2][3 4 5]]   

数组(增删改)

import numpy
# 每个数组的长度必须一致
arr = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
""" 数组(添加) """
# print(numpy.append(arr,[100,200,300]))   # >>> [1 2 3 4 5 6 7 8 9 100 200 300] 
""" 数组(插入) """
# print(numpy.insert(arr,1,[0,0,0]))       # >>> [1 0 0 0 2 3 4 5 6 7 8 9]
""" 数组(删除) """
# print(numpy.delete(arr,[6,7]))           # >>> [1 2 3 4 5 6 9]    # 索引位置删除
# print(numpy.delete(arr,2,axis=0))        # >>> [[1 2 3][4 5 6]]   # 整个行删除
# print(numpy.delete(arr,numpy.s_[::2]))   # >>> [2 4 6 8]          # 按照步长删除
# print(numpy.delete(arr,numpy.s_[2:]))    # >>> [1 2]              # 指定位置开始删除
# print(numpy.delete(arr,numpy.s_[1:8]))   # >>> [1 9]              # 指定范围内的删除
""" 数组(展开) """      
# print(arr.flatten())                     # >>> [1 2 3 4 5 6 7 8 9]      
# print(arr.ravel())                       # >>> [1 2 3 4 5 6 7 8 9]    
""" 数组(填充) """    
# print(numpy.zeros(5))                    # >>> [0. 0. 0. 0. 0.]
# print(numpy.ones(5))                     # >>> [1. 1. 1. 1. 1.]
""" 数组(唯一) """
# print(numpy.unique([1,1,2,3,3,3]))       # >>> [1 2 3]            # 查找数组内的唯一元素

数组(合并与拆分)

import numpy
""" 水平或垂直合并 """
a1 = numpy.arange(3)                            # >>> [0 1 2]
a2 = numpy.arange(3, 6)                         # >>> [3 4 5]
# print(numpy.hstack((a1, a2)))                 # >>> [0 1 2 3 4 5]                   # 水平合并
# print(numpy.vstack((a1, a2)))                 # >>> [[0 1 2][3 4 5]]                # 垂直合并
b1 = numpy.array([[1], [2], [3]])
b2 = numpy.array([["a"], ["b"], ["c"]])
# print(numpy.hstack((b1, b2)))                 # >>> [['1' 'a']['2' 'b']['3' 'c']]
# print(numpy.vstack((b1, b2)))                 # >>> [['1']['2']['3']['a']['b']['c']]
""" 数组合并 """
c1 = numpy.array([[1,2],[3,4]])
c2 = numpy.array([[10,20],[30,40]])
# print(numpy.concatenate((c1,c2)))             # >>> [[1 2][ 3 4][10 20][30 40]]     # 合并
# print(numpy.concatenate((c1,c2),axis=0))      # >>> [[1 2][ 3 4][10 20][30 40]]     # 合并(行)
# print(numpy.concatenate((c1,c2),axis=1))      # >>> [[1 2 10 20][3 4 30 40]]        # 合并(列)
""" 数组拆分 """
arr2D = numpy.arange(9).reshape(3, 3)           # >>> [[0 1 2][3 4 5][6 7 8]]
# print(numpy.hsplit(arr2D,3)[0])               # >>> [[0][3][6]]  # 水平拆分
# print(numpy.vsplit(arr2D,3)[0])               # >>> [[0 1 2]]    # 垂直拆分

数组(运算)

import numpy

"""
numpy.sin(arr)	     正弦
numpy.cos(arr)       余弦
numpy.tan(arr)	     正切
numpy.arcsin(arr) 	 反正弦
numpy.arccos(arr)	 反余弦
numpy.arctan(arr)	 反正切
numpy.exp(arr)	     指数函数
numpy.sqrt(arr) 	 开根号
一元函数: abs, sqrt, exp, log, ceil, round, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan
二元函数: add, substract, multiply, divide, power, mod, maximum, mininum
"""
m = numpy.arange(6).reshape(2, 3)    # >>> [[0 1 2][3 4 5]] 
""" 加减乘除 """
# 方法1
# print(m + 1)                       # >>> [[1 2 3][4 5 6]]
# print(m - 1)                       # >>> [[-1  0  1][ 2  3  4]]
# print(m * 2)                       # >>> [[ 0  2  4][ 6  8 10]]
# print(1 / (m + 1))                 # >>> [[1. 0.5 0.33333333][0.25 0.2 0.16666667]]
# 方法2
m1 = numpy.array([[4,15],[10,35]])   
m2 = numpy.array([[1,3],[5,7]]) 
# print(numpy.add(m1,m2))            # >>> [[5 18][15 42]]                  # 加
# print(numpy.subtract(m1,m2))       # >>> [[3 12][5 28]]                   # 减
# print(numpy.multiply(m1,m2))       # >>> [[4 45][50 245]]                 # 乘
# print(numpy.divide(m1,m2))         # >>> [[4. 5.][2. 5.]]                 # 除
""" 向量点积 """
# print(numpy.dot([0,1,2],[0,1,2]))         # >>> 5                         # 向量点积(a1*b1+a2*b2+...)
""" 叠乘 """
# print(numpy.multiply([1,2,3],[1,2,3]))    # >>> [1 4 9]                   # 乘
# print(numpy.outer([1,2],[5,10,15]))       # >>> [[ 5 10 15][10 20 30]]    # 叠乘
""" 幂运算 """
# print(m**3)                        # >>> [[  0   1   8][ 27  64 125]]     
""" 平均值 """
# 方法1
# print(numpy.mean(a=m))             # >>> 2.5                              # 平均值
# print(numpy.mean(m,axis=0))        # >>> [1.5 2.5 3.5]                    # 平均值(行)
# print(numpy.mean(m,axis=1))        # >>> [1. 4.]                          # 平均值(列)
# 方法2
# print(numpy.median(m))             # >>> 2.5
# print(numpy.median(m,axis=0))      # >>> [1.5 2.5 3.5] 
# print(numpy.median(m,axis=1))      # >>> 2.5
""" max,min """
# print(numpy.max(m))                # >>> 5                                # 最大值
# print(numpy.min(m))                # >>> 0                                # 最小值
m2=numpy.array([[1,3,0,2],[2,0,3,2]])
# print(m2.max(axis=0))              # >>> [2 3 3 2]                        # max的对应值(行)
# print(m2.argmax(axis=0))           # >>> [1 0 1 0]                        # max的对应索引(行)
# print(m2.max(axis=1))              # >>> [3 3]                            # max的对应值(列)
# print(m2.argmax(axis=1))           # >>> [1 2]                            # max的对应值(列)
# print(numpy.argmin([3,1,2,4,5]))   # >>> 1                                # min的对应索引
# print(numpy.argmax([2,3,5,4,1]))   # >>> 2                                # max的对应索引
""" 标准差 """
# print(numpy.std(m))                # >>> 1.707825127659933               
""" 方差 """
# print(numpy.var(m))                # >>> 2.9166666666666665               
""" 求和 """
# print(numpy.sum(m))                # >>> 15                               # 总合
# print(numpy.cumsum(m))             # >>> [ 0  1  3  6 10 15]              # 第n个元素为前n-1个元素累加和
# print(numpy.sum(m, axis=0))        # >>> 15 [3 5 7]                       # 水平相加
# print(numpy.sum(m, axis=1))        # >>> 15 [ 3 12]                       # 垂直相加
""" 平铺 """
# print(numpy.tile(m,(2,1)))         # >>> [[0 1 2][3 4 5][0 1 2][3 4 5]]   
""" 四舍五入 """
d1=numpy.array([[1.123,2.456],[3.789,4.555]])
# print(numpy.round(d1))             # >>> [[1. 2.][4. 5.]]
""" 绝对值 """
# print(numpy.abs([-1,-2,3]))        # >>> [1 2 3]                          
# print(numpy.absolute([-2,-3,4]))   # >>> [2 3 4]                          
""" 平方 """ 
# print(numpy.square([1,2,3]))       # >>> [1 4 9]                          
""" 排序 """
# print(numpy.sort(numpy.array([1, 4, 3, 2, 5, 6])))  # >>> [1 2 3 4 5 6]  

数组(元素获取)

import numpy
arr2D = numpy.arange(12).reshape(3, 4)
# print(arr2D)           # >>> [[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
# print(arr2D[1,1])      # >>> 5 # 等同于 arr2D[1][1]
# print(arr2D[:1,2:])    # >>> [[2 3]]
# print(arr2D[:1])       # >>> [[0 1 2 3]]
# print(arr2D[::2])      # >>> [[ 0  1  2  3][ 8  9 10 11]]
# print(arr2D[::-1])     # >>> [[ 8  9 10 11][ 4  5  6  7][ 0  1  2  3]]

数组(布尔值判断)

import numpy
s = numpy.arange(12).reshape(3, 4)
# print(s)                   # >>> [[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
row = numpy.array(
    [True, False, False]
)
column = numpy.array(
    [True, True, False, False]
)
# print(s[row, :])           # >>> [[0 1 2 3]]          # 保留第一行
# print(s[:, column])        # >>> [[0 1][4 5][8 9]]    # 保留前两列
# print(s[s > 5])            # >>> [ 6  7  8  9 10 11]  

数组(random)

import numpy
""" 随机数的条件判断 """
arrNumber = numpy.random.rand(2,3)
# print(arrNumber)                                        # >>> [[0.4040385  0.25586712 0.98025492][0.73933662 0.24635626 0.83856925]]
arrBool = arrNumber < 0.8
# print(arrBool)                                          # >>> [[ True True False][ True True False]]
""" 随机整数 """
# print(numpy.random.randint(5))                          # >>> 3
# print(numpy.random.randint(1,5))                        # >>> 1
# print(numpy.random.randint(5,size=10))                  # >>> [1 4 3 2 1 1 2 0 3 3]
# print(numpy.random.randint(5,10,size=(2,2)))            # >>> [[7 5][9 5]]
""" 随机浮点数-类型1 """
# print(numpy.random.rand(2))                             # >>> [0.97270619 0.51185975]
# print(numpy.random.rand(2,2))                           # >>> [[0.47802695 0.62404042][0.50270551 0.22062832]]
# print(numpy.random.rand(2,2)*100)                       # >>> [[ 4.5516591  31.96526817][18.54665825 29.90166157]]
# print(numpy.random.rand(4).reshape(1,4))                # >>> [[0.94190749 0.45243098 0.6083467  0.44261581]]
# print(numpy.random.rand(4).reshape(2,2))                # >>> [[0.55084269 0.65391016][0.95948768 0.99081886]]
""" 随机浮点数-类型2 """
# print(numpy.random.normal(size=(2,2)))                  # >>> [[ 0.25009147 -1.23808099][ 1.24380185 -0.44293845]] 
# print(numpy.random.standard_normal((2,2)))              # >>> [[-0.79393322  0.88915117][-0.3713971  -0.9275841 ]]
# print(numpy.random.standard_normal(3))                  # >>> [-0.88057398  0.29794299 -1.41674055]
# print(numpy.random.randn(2,2))                          # >>> [[ 0.25219723 -1.22391401][ 0.48900845 -1.53689193]]   
# print(numpy.random.randn(3))                            # >>> [-0.51382206  0.65768077 -0.23819675]
""" 仅限1维数组,随机排列 """
# print(numpy.random.permutation([1,2,3,4,5]))            # >>> [3 5 4 2 1] 
""" 0~1范围内产生随机数 """
# print(numpy.random.random_sample(2))                    # >>> [0.38562772 0.42020144]  
# print(numpy.random.random_sample((2,2)))                # >>> [[0.41110841 0.79926067][0.80795522 0.75781746]]    
""" empty方法 """
# print(numpy.empty([2,2]))                               # >>> [[9.90263869e+067 8.01304531e+262][2.60799828e-310 1.40688321e-311]]
# print(numpy.empty(3))                                   # >>> [ 6.26756526e+250 -1.06827737e-149  1.11520858e-166]
# print(numpy.empty(shape=(3),dtype=int))                 # >>> [1044266506 1025531680 1953263648]
# print(numpy.empty(shape=(2,2),dtype=numpy.int8))        # >>> [[0 0][0 0]]   # >>> 空的多维数组
# print(numpy.empty(shape=(3),dtype=float))               # >>> [ 9.84972389e-312  9.84972389e-312 -1.73811448e-088]
# print(numpy.empty(shape=(3),dtype=numpy.float16))       # >>> [-2.304e+04  6.131e-02  2.766e-05]
"""  随机抽取 """
# print(numpy.random.choice(a=[1,2,3,4,5],size=(2)))      # >>> [5 1] 
# print(numpy.random.choice(a=[1,2,3,4,5],size=(2,2)))    # >>> [[3 1][5 4]]
""" 给定形状产生随机数组 """
# print(numpy.random.uniform(low=1,high=5,size=(2)))      # >>> [3.93644384 3.79101644] 
# print(numpy.random.uniform(1,5,size=(2,2)))             # >>> [[2.90634328 4.17696447][1.83768879 1.75956575]]
""" 仅限随机1次,后续数据相同 """
# print(numpy.random.RandomState(0).rand(3))              # >>> [0.5488135  0.71518937 0.60276338]              
# print(numpy.random.RandomState(1).rand(3))              # >>> [4.17022005e-01 7.20324493e-01 1.14374817e-04]  # 科学记数法
""" 无限制随机 """
# print(numpy.random.RandomState().rand(3))               # >>> [0.32202852 0.82726346 0.59902676]              
""" 0 默认数字 1 科学记数法   """
# numpy.random.seed(1)                                    
# print(numpy.random.rand(2,2))                           # >>> [[4.17022005e-01 7.20324493e-01][1.14374817e-04 3.02332573e-01]]

数组(动态数组)

import numpy
# numpy.frombuffer 用于实现动态数组
"""
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
buffer 可以是任意对象,会以流的形式读入。
dype   返回数组的数据类型,可选。
count  读取数据数量,默认为-1,读取所有数据。
offset 读取的起始位置,默认为0
"""
data =b'hello world!'                                       # 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
r1 = numpy.frombuffer(data,dtype='S3',offset=0,count=-1)    # buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。
r2 = numpy.frombuffer(data,dtype='S4')
r3 = numpy.frombuffer(data,dtype='S3',count=1)
# print(r1)   # >>> [b'hel' b'lo ' b'wor' b'ld!']
# print(r2)   # >>> [b'hell' b'o wo' b'rld!']
# print(r3)   # >>> [b'hel']

数组(转ASCII编码)

import numpy
# 数组元素转ASCII编码
abc = "abcdef"
# print(numpy.fromstring(abc,dtype=numpy.int8)) 
# >>> [ 97  98  99 100 101 102]   

Numpy文件操作

import numpy as N
import os

fileName="data.npy"
# 存储为npy文件
'''
os.chdir("C:/Users/Administrator/Desktop/")
arr=N.random.rand(5,5)
N.save(fileName,arr)
'''

# 读取npy文件
'''
os.chdir("C:/Users/Administrator/Desktop/")
loadFile=N.load(fileName)
print(loadFile)
'''

# 存储为文本文件(默认为科学记数法)
os.chdir("C:/Users/Administrator/Desktop/")
arr=N.random.rand(5,5)
# N.savetxt("data.txt",arr,delimiter=",",fmt="%2f")  # fmt 浮点型
# N.savetxt("data2.txt",arr,delimiter=",")           # delimiter 分隔

# 读取文本文件
# loadFileTxt=N.loadtxt("data2.txt",delimiter=",")
# print(loadFileTxt)

简单例子(弧度角度运算)

import numpy

# 角度转弧度
t = numpy.array([0,30,60])
# 通过乘 pi/180 转化为弧度  
# print (numpy.sin(t*numpy.pi/180))    # 正弦值        # >>> [0. 0.5 0.8660254]
# print (numpy.cos(t*numpy.pi/180))    # 角度的余弦值   # >>> [1. 0.8660254 0.5]
# print (numpy.tan(t*numpy.pi/180))    # 正切值        # >>> [0. 0.57735027 1.73205081]

# 弧度转角度 
"""
deg = 0         # 角度
arc = 0.5       # 弧度
hundred = 100   
while True:
     if(numpy.round(arc*hundred) == numpy.round(numpy.sin(numpy.array([deg])*numpy.pi/180)[0]*hundred)):
          print("角度:",deg)
          break
     else:
          # print(numpy.sin(numpy.array([deg])*numpy.pi/180)[0])
          pass
     deg = deg + 1
"""

猜你喜欢

转载自blog.csdn.net/werdasooooo/article/details/134995195