「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一定时逗号分隔符


相关文章
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
40 2
|
1月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
37 3
|
1月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
61 5
|
1月前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
57 2
|
2月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
85 10
|
2月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
58 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
2月前
|
机器学习/深度学习 算法 数据挖掘
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧1
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
54 5
|
2月前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
104 4
|
2月前
|
机器学习/深度学习 算法 数据可视化
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧2
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
43 1
|
2月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
43 1