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


相关文章
|
2天前
|
存储 机器学习/深度学习 数据处理
NumPy:从初识到实战,探索Python科学计算的无限可能
NumPy:从初识到实战,探索Python科学计算的无限可能
38 0
|
2天前
|
SQL 数据采集 数据挖掘
构建高效的Python数据处理流水线:使用Pandas和NumPy优化数据分析任务
在数据科学和分析领域,Python一直是最受欢迎的编程语言之一。本文将介绍如何通过使用Pandas和NumPy库构建高效的数据处理流水线,从而加速数据分析任务的执行。我们将讨论如何优化数据加载、清洗、转换和分析的过程,以及如何利用这些库中的强大功能来提高代码的性能和可维护性。
|
2天前
|
存储 测试技术 程序员
【Python】—— NumPy基础及取值操作
【Python】—— NumPy基础及取值操作
8 1
|
2天前
|
索引 Python
【Python】—— Numpy 初体验
【Python】—— Numpy 初体验
4 0
|
2天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
Python深度学习基于Tensorflow(1)Numpy基础
Python深度学习基于Tensorflow(1)Numpy基础
24 5
|
2天前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
2天前
|
数据挖掘 数据处理 索引
Python数据分析面试:NumPy基础与应用
【4月更文挑战第16天】了解并熟练运用NumPy是衡量Python数据分析能力的关键。本文探讨了面试中常遇到的NumPy问题,包括数组创建、属性、索引切片、数组运算、统计函数以及重塑和拼接,并提供了相关代码示例。同时强调了易错点,如混淆Python列表与NumPy数组、误解广播规则等,提醒在数据处理中注意性能和内存效率。掌握这些知识点将有助于提升数据分析面试表现和技能。
33 5
|
2天前
|
存储 数据挖掘 数据处理
Python中数据分析工具NumPy
【4月更文挑战第14天】NumPy是Python的数值计算扩展库,专注于处理大型多维数组和矩阵。其主要特性包括ndarray对象(存储同类型元素的高效数据容器)、广播机制(处理不同形状数组运算)、线性代数与统计函数、随机数生成及与C/C++/Fortran代码集成。作为Pandas等数据分析工具的基础,掌握NumPy对提升数据处理能力至关重要。
9 1
|
2天前
|
Python
用Python的Numpy求解线性方程组
用Python的Numpy求解线性方程组
|
2天前
|
数据采集 数据可视化 算法
Python在大数据分析中的力量:Pandas、NumPy与SciPy
【4月更文挑战第8天】Pandas、NumPy和SciPy是Python数据分析的核心,构成其在大数据领域的重要地位。Pandas提供高效的数据操作,包括DataFrame和Series结构,以及数据清洗和预处理工具。NumPy专注于数组计算,提供高性能的ndarray和数学函数。SciPy则包含专业算法,适用于科学与工程计算。这三者协同工作,覆盖数据分析的全过程,形成强大的Python生态系统。随着社区的不断创新和新库的涌现,如Dask和CuDF,Python在大数据分析领域的潜力将持续增长。
51 0