「Python」Numpy初识

简介: 参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数

「Python」Numpy初识


本文的目录👇:

  • 创建数组
  • arange创建,array合并
  • 数组的基本运算
  • + - * / % .T linalg.lnv
  • 数组的切片与索引
  • a[m,:n]
  • 数组的堆叠
  • 改变数组形状
  • reshape()
  • ravel(拉直)
  • flatten(拉直)
  • shape(改变形状)
  • transpose(转置)
  • 数组堆叠
  • hstack(水平叠加)
  • vstack(垂直叠加)
  • dstack(深度叠加)
  • numpy的拆分
  • hsplit(横向拆分)
  • vsplit(纵向拆分)
  • dsplit(深度拆分)
  • 文件操作
  • npy & npz
  • np.loadtxt


创建数组


arange创建,array合并


参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况

1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。

2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。

3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数

pip install numpy # 安装模块
import numpy as np
a = np.arange(5)  # 创建一维数组
'''
>>> print(a)
[0 1 2 3 4]
''''
b = np.array([np.arange(6),np.arange(6)]) 
# 一个2 × 6 的二维数组
'''
创建两个1×6的数组,然后用array方法将两个数组合成一个2×6的数组
[[0 1 2 3 4 5]
 [0 1 2 3 4 5]]
'''
m = 4 # 行
n = 6 # 列
x = [y for y in range(n)] # 列
c = np.array([x]*m)
'''
>>> print(x)
[0, 1, 2, 3, 4, 5]
>>> print(c)  创建一个m*n的矩阵
[[0 1 2 3 4 5]
 [0 1 2 3 4 5]
 [0 1 2 3 4 5]
 [0 1 2 3 4 5]]
'''

数组的基本运算


+ - * / % .T linalg.lnv

np.add(a,b) or a + b  # 加法
np.subtraction(a,b) or a - b # 减法
np.multiply(a,b) or a * b # 乘法(X乘)
np.add(a,b) # 点乘
np.divide(a,b) or a / b # 除法
# 向量与标量之间 a = np.array([1,2,3],[4,5,6])
a + 1
a - 1
a * 2
a / 2
a % 2 # 求余 [[1,0,1],[0,1,0]]
a.T # 转置 [[1,4],[2,5],[3,6]]
import numpy.linalg as lg
lg.lnv(a) # 矩阵的逆 (矩阵的逆的充要条件是矩阵满秩)

数组的切片与索引


a[m,:n]


与python的数组切片一样(了解的可以跳过了...)

数组的索引均从0开始

a = np.arange(9) # a = [0,...,8]
a[3:7] # [3,4,5,6]
a[:7:2] # [0,2,4,6] 下标从 0 - 7 ,且下标每次递增2
a[::-1] # [8,7,6,5,4,3,2,1,0] 反转数组
# 二维数组
a = np.array([[1,2,3],[4,3,2]])
a[1][0] # [4] 第1行第0列 这里的数组行和列的索引均是从0开始
a[1,:2] # [4, 3] 第1行的前两个元素 :2 指的是索引0和1,即前两个

数组的堆叠


改变数组形状


reshape()

b = np.arange(24).reshape(2,3,4)
'''
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]
 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
'''

ravel(拉直) , flatten(拉直),shape(改变形状),transpose(转置)

b.ravel() # 拆解,将多多维数组变为一维, 只改变看到的
'''
[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
'''
b.flattern() # 拉直,function与ravel相同,但是flatten返回的是真实的数组,需要分配新的内存空间
b.shape(6,4) # 使用元组改变数组形状, 变为6行4列
b.transpose() # 转置
'''
[[ 0,  4,  8, 12, 16, 20],
       [ 1,  5,  9, 13, 17, 21],
       [ 2,  6, 10, 14, 18, 22],
       [ 3,  7, 11, 15, 19, 23]]
'''

数组堆叠


hstack(水平叠加),vstack(垂直叠加),dstack(深度叠加)

a = [[0, 1, 2],      b = [[0, 2, 4],
     [3, 4, 5],           [6, 8, 10],   
     [6, 7, 8]]           [12, 14, 16]
np.hstack((a,b)) # 注意有两层括号
'''
[[ 0,  1,  2,  0,  2,  4],
 [ 3,  4,  5,  6,  8, 10],
 [ 6,  7,  8, 12, 14, 16]]
'''
np.vstack((a,b))
'''
[[ 0,  1,  2],
 [ 3,  4,  5],
 [ 6,  7,  8],
 [ 0,  2,  4],
 [ 6,  8, 10],
 [12, 14, 16]]
'''
np.dstack((a,b))
Out: array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],
       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],
       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])

numpy的拆分


hsplit(横向拆分),vsplit(纵向拆分),dsplit(深度拆分)

a = [[0, 1, 2],
     [3, 4, 5],
     [6, 7, 8]]
np.hsplit(a,3)
Out:[array([[0],[3], [6]]), 
    .  array([[1], [4],[7]]), 
       array([[2],[5], [8]])]
np.vsplit(a,3)
Out: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
c= np.arange(27).reshape(3,3,3)
np.dsplit(c,3)
Out:[array([[[ 0],
         [ 3],
         [ 6]],
        [[ 9],
         [12],
         [15]],
        [[18],
         [21],
         [24]]]), array([[[ 1],
         [ 4],
         [ 7]],
        [[10],
         [13],
         [16]],
        [[19],
         [22],
         [25]]]), array([[[ 2],
         [ 5],
         [ 8]],
        [[11],
         [14],
         [17]],
        [[20],
         [23],
         [26]]])]

文件操作


npy & npz


np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。


np.save(filename,arr) 将数组保存为.npy文件

np.load()加载文件  可自动识别.npy或者.npz文件

np.savez(filename, *arg, **kwds)将多个数组保存在一个文件中。


第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0, arr_1, …。

np.savez(f'./dataset/train/{i}.npz',signal=signal,label=label)  
# 等号前面的signal的是数组的名称,方便后续读取的时候以字典的形式读出来,等号后面的singal才是真正的数组
t = np.load('xxx')
print(t['signal'])

此时load函数自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容。


savez函数输出的是一个压缩文件(扩展名为npz),其中每个文件都是一个save函数保存的npy文件,文件名对应于数组名。

r = np.load(r'C:\python数据分析\arraytest1.npz')
print(r)
print(r['arr_0'])

np.loadtxt


np.loadtxtnp.savetxt可以读写1维和2维数组的文本文件: 同时可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。


—— 注意:只能处理 1维和2维数组。可以用于CSV格式文本文件

import numpy as np
a = np.loadtxt('./dataset/train_signal/1.txt',delimiter='\n')
print(a) # type(a) -> np.array
print(a.dtype) # float
'''
[-37.         -18.          -0.99999988 ...  53.          24.
  14.        ]
'''
#.csv格式
ar1 = np.random.rand(2,3)
np.savetxt(r'C:\arraytest2.csv',ar1,delimiter=',')#csv一定时逗号分隔符


相关文章
|
4月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
477 1
|
4月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
293 0
|
6月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
634 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
6月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
558 0
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
373 2
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
861 5
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
375 3
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
529 2
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
519 10
|
机器学习/深度学习 算法 数据挖掘
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧1
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
254 5

推荐镜像

更多