编程手养成计划 Day7、8 您所在的位置:网站首页 labview将数据写入数组 编程手养成计划 Day7、8

编程手养成计划 Day7、8

2023-06-16 07:16| 来源: 网络整理| 查看: 265

NumPy基础(二)

目录 NumPy基础(二)一、创建数组(一)将Python array_like对象转换为Numpy数组(二)Numpy原生数组的创建1. 数组生成函数汇总2. zeros()3. ones()4. empty()5. nidm、shape6. arange()7. linspace()8. indices() (三)从硬盘中读取数组 二、NumPy与输入输出(一)NumPy内建二进制格式1. save()2. load()3. savez()4. savez_compressed (二)使用genfromtxt导入数据1. 定义输入2. 将行拆分为列(1)delimiter参数(2)autostrip参数(3)comments参数 3. 跳过直线并选择列(1)skip_header和skip_footer参数(2)usecols参数 4. 选择数据的类型5. 设置名称(1)结构化dtype(2)names参数(3)defaultfmt参数(4)验证名称 6. 快捷方式函数

一、创建数组 (一)将Python array_like对象转换为Numpy数组

个人理解为将python中的列表类型list转化为ndarry类型

import numpy as np x = np.array([2,3,1,0]) (二)Numpy原生数组的创建 1. 数组生成函数汇总 函数名描述array将输入数据转换为ndarray,如不显式指明数据类型,将自行判断;默认复制所有的输入数据asarray将输入转换为ndarray,但如果输入已经是ndarray则不再复制arangePython内建函数range的数组版,返回一个数组ones根据给定形状和数据类型生成全1数组ones_like根据所给的数组生成一个形状一样的全1数组zeros根据给定形状和数据类型生成全0数组zeros_like根据所给的数组生成一个形状一样的全0数组empty根据给定形状生成一个没有初始化的空数组empty_like根据所给的数组生成一个形状一样但没有初始化的数组full根据给定形状和数据类型生成指定数值的数组full_like根据所给的数组生成一个形状一样但内容是指定数值的数组linspace创建具有指定数量元素的数组,并在指定的开始值和结束值之间平均间隔。indices创建一组可以表示每个维度变化的数组。eye,identity生成一个 N × N N\times N N×N特征矩阵(对角线1,其余0) 2. zeros()

我们可以使用zeros()函数创建一个全为0的数组,数组的默认dtype是float64。

import numpy as np x = np.zeros((2, 3), dtype=np.int_) 3. ones()

同样的,我们可以使用ones()创建一个全为1的数组,用法与zeros()相同。

import numpy as np x = np.ones((2, 3), dtype=np.int_) 4. empty()

我们也可以使用empty()创建一个没有初始化数值的数组。

import numpy as np x = np.empty((2, 4)) 5. nidm、shape

我们可以通过检查nidm和shape属性检查建立的数组。

>>> import numpy as np >>> x = np.zeros((2, 4, 3)) >>> x.nidm # 返回维数,这里为三维数组 3 >>> x.shape (2, 4, 3) # 返回数组的具体结构 6. arange()

与python中range()类似,可以使用arange()创建具有有规律递增值的数组。

>>> import numpy as np >>> np.arange(10) # 输出从0到9的数组(相当于省略初始值) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.arange(2, 10) # 输出从2到9的数组 array([2, 3, 4, 5, 6, 7, 8, 9]) >>> np.arange(2, 10, 3) # 输出从2到9的数组,步长为3 array([2, 5, 8]) >>>np.arange(2, 4, dtype = np.int_) # 设置数据类型(无小数默认为int32,小数默认为float64) 7. linspace()

我们可以使用linspace()来创建一个包含始末数字的数组,其中数组的长度可以指定。默认数据类型为float64。

>>> import numpy as np >>> np.linspace(2, 4, 3) array([2., 3., 4.]) 8. indices()

indices()将创建一组数组(堆积为一个更高维的数组),每个维度一个,每个维度表示该维度中的变化。

>>> import numpy as np >>> np.indices((3,3)) array([[[0, 0, 0], # 这一边从上至下递加 [1, 1, 1], [2, 2, 2]], [[0, 1, 2], # 这一边从左至右递加 [0, 1, 2], [0, 1, 2]]]) (三)从硬盘中读取数组

详见:NumPy中文网:从磁盘读取数组

二、NumPy与输入输出 (一)NumPy内建二进制格式

np.save和np.load是高效存储硬盘数据的两大工具函数。数组在默认情况下是以未压缩的格式进行存储的,后缀名是.npy

1. save()

我们可以通过np.save保存数组,如果文件存放路径中没写,会自动补上.npy。

import numpy as np x = np.ones((2, 4)) np.save('1', x) 2. load()

硬盘上的数组可以通过np.load进行载入

import numpy as np x = np.load('1.npy') print(x) 3. savez()

我们可以使用savez并将数组作为参数传递给该函数,用于在压缩文件(.npz)中保存多个数组

import numpy as np x = np.ones((2, 4)) y = np.zeros((2, 4)) np.savez('1', a=x, b=y) # 通过键值对(字典)的形式创建文件

当我们载入一个.npz文件时,会获得一个字典。

import numpy as np arch = np.load("1.npz") # 读取文件".npz" print(arch['a']) # 读取键'a'的值 4. savez_compressed

如果你的数据已经压缩好了,你可能会想要使用np.savez_compressed将数据存入已经压缩好的文件。

import numpy as np z = np.zeros((5, 4)) np.savez_compressed('1.npz', c=z) # 创建键值对c-->z (二)使用genfromtxt导入数据

首先,我们新建 1.txt 用于储存数据

1,2,3,4,5 6,7,8,9,10 1. 定义输入

genfromtxt的唯一强制参数是数据的来源。它可以是一个字符串,一串字符串或一个生成器(file, str, pathlib.Path, list of str, 或者generator)。如果提供了单个字符串,则假定它是本地或远程文件的名称,或者带有read方法的开放文件类对象。如果提供了字符串列表或生成器返回字符串,则每个字符串在文件中被视为一行。当传递远程文件的URL时,该文件将自动下载到当前目录并打开。 同时,genfromtxt还可以自动识别文件是否是压缩类型,目前支持两种压缩类型:gzip和bz2。

2. 将行拆分为列 (1)delimiter参数

一旦文件被定义并打开进行读取,genfromtxt会将每个非空行分割为一串字符串。 空的或注释的行只是略过。 delimiter关键字用于定义拆分应该如何进行。

根据字符来分割: >>> import numpy as np >>> np.genfromtxt("1.txt", delimiter=",") array([[ 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10.]]) 根据空格来分割:

为方便展示,我们重写 1.txt 中的数据

1 2 3 4 5 6 7 8 9 10

在书写时,我们故意将后几位的空格拉长。 默认情况下,genfromtxt假定delimiter=None,这意味着该行沿着空白区域(包括制表符)分割,并且连续的空白区域被视为单个空白区域。

>>> import numpy as np >>> np.genfromtxt("1.txt") # 读取"1.txt"中的数据 array([[ 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10.]]) 根据字符长度来分割:

此时,1.txt 中的数据如下

1234 5678

在这种情况下,我们需要将delimiter设置为单个整数(如果所有列的大小相同)或整数序列(如果列的大小可能不同):

>>> import numpy as np >>> np.genfromtxt("1.txt", delimiter=1) # delimiter为单个整数 array([[1., 2., 3., 4.], [5., 6., 7., 8.]]) >>> np.genfromtxt("1.txt", delimiter=(2, 1)) # delimiter为整数序列 array([[12., 3.], [56., 7.]]) (2)autostrip参数

当配置autostrip=True,python会自动删除分割后字符的前后空格。

1.txt 文件如下:

1, 2,3, 4 5 , 6 , 7, 8

功能实现如下:

>>> import numpy as np >>> np.genfromtxt("1.txt", delimiter=',', dtype=str) array([['1', ' 2', '3', ' 4'], ['5 ', ' 6 ', ' 7', ' 8']], dtype=',


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有