NumPy基础知识(二)

NumPy基础知识(二)

数组创建

简介

创建数组有5种通用机制:

  1. 从其他Python结构(例如列表,元组)转换

  2. 内在的numpy数组创建对象(例如,arange,1、0等)

  3. 从磁盘读取阵列的标准或自定义格式

  4. 通过使用字符串或缓冲区从原始字节创建数组

  5. 使用特殊的库函数(例如,随机的)

本节将不介绍复制,联接或以其他方式扩展或变异现有阵列的方法。它也不会涵盖创建对象数组或结构化数组。两者均在其各自的章节中介绍。

将Python array_like对象转换为NumPy数组

通常,可以通过使用array()函数将Python中以数组状结构排列的数值数据转换为数组。最明显的例子是列表和元组。有关使用的详细信息,请参见array()的文档。一些对象可能支持数组协议,并允许以这种方式转换为数组。查找是否可以使用array()将对象转换为numpy数组的简单方法是,以交互方式尝试并查看其是否有效!(Python方式)。

例子:

>>>

>>> x = np.array([2,3,1,0])
>>> x = np.array([2, 3, 1, 0])
>>> x = np.array([[1,2.0],[0,0],(1+1j,3.)]) # note mix of tuple and lists,
    and types
>>> x = np.array([[ 1.+0.j, 2.+0.j], [ 0.+0.j, 0.+0.j], [ 1.+1.j, 3.+0.j]])

内部NumPy数组创建

NumPy具有内置功能,可以从头开始创建数组:

zeros(shape)将创建一个数组,其中填充了具有指定形状的0个值。默认dtype是float64。

>>>

>>> np.zeros((2, 3))
array([[ 0., 0., 0.], [ 0., 0., 0.]])

一个(形状)将创建一个填充有1个值的数组。在所有其他方面,它都等于零。

arange()将创建具有规则递增值的数组。检查文档字符串以获取有关各种使用方式的完整信息。这里将给出一些示例:

>>>

>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(2, 10, dtype=float)
array([ 2., 3., 4., 5., 6., 7., 8., 9.])
>>> np.arange(2, 3, 0.1)
array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])

请注意,arange docstring中描述了有关用户应注意的最后用法的一些细微之处。

linspace()将创建具有指定数量的元素的数组,并在指定的开始值和结束值之间平均隔开。例如:

>>>

>>> np.linspace(1., 4., 6)
array([ 1. ,  1.6,  2.2,  2.8,  3.4,  4. ])

这个创建函数的优点是可以保证元素的数量以及起点和终点,而arange()通常不能保证任意的起点,终点和步长值。

index()将创建一组数组(堆叠为一维数组),每个维一个,每个维表示该维的变化。一个例子说明了比口头描述好得多的例子:

>>>

>>> np.indices((3,3))
array([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[0, 1, 2], [0, 1, 2], [0, 1, 2]]])

这对于评估常规网格上的多维功能特别有用。

阅读阵列从磁盘

大概这是大型数组创建的最常见情况。当然,这些细节在很大程度上取决于磁盘上数据的格式,因此本节仅能提供有关如何处理各种格式的一般指导。

标准的二进制格式

各个字段具有用于数组数据的标准格式。以下列出了使用已知的python库读取它们并返回numpy数组的库(可能还有其他可能读取并转换为numpy数组的库,因此也请检查最后一部分)

HDF5: h5py
FITS: Astropy

不能直接读取但不难转换的格式示例包括PIL之类的库支持的那些格式(能够读取和写入许多图像格式,例如jpg,png等)。

常见的ASCII格式

逗号分隔值文件(CSV)被广泛使用(以及Excel等程序的导出和导入选项)。有多种方法可以在Python中读取这些文件。Python中有CSV函数,而pylab中有函数(matplotlib的一部分)。

可以使用scipy中的io包读取更多通用的ascii文件。

自定义的二进制格式

一个人可以使用多种方法。如果文件具有相对简单的格式,则可以编写一个简单的I / O库,并使用numpy fromfile()函数和.tofile()方法直接读取和写入numpy数组(但是请注意您的字节序!)或存在读取数据的C ++库,可以用多种技术包装该库,尽管这肯定需要做很多工作,并且需要相当多的高级知识才能与C或C ++交互。

使用的特殊图书馆

有一些库可用于生成特殊用途的数组,无法枚举所有库。最常见的用途是随机使用许多可以生成随机值数组的数组生成函数,以及一些实用程序函数以生成特殊矩阵(例如对角线)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kimboyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值