NumPy的详细教程(官网手册翻译)

这篇教程详细介绍了NumPy的基础知识,包括先决条件、数组对象的属性如秩、形状、dtype等,以及创建数组的方法如array、zeros、ones等。还涉及基本运算、通用函数(ufunc)、索引、切片、迭代、形状操作如reshape和split,以及广播法则和花哨的索引技巧。适合已经有一定Python基础的学习者深入学习NumPy。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NumPy的详细教程(官网手册翻译)

先决条件

在阅读这个教程之前,你多少需要知道点Python。如果你想从新回忆下,请看看Python Tutorial.

如果你想要运行教程中的示例,你至少需要在你的电脑上安装了以下一些软件:

Python
NumPy
这些是可能对你有帮助的:

ipython是一个净强化的交互Python Shell,对探索NumPy的特性非常方便。
matplotlib将允许你绘图
Scipy在NumPy的基础上提供了很多科学模块
基础篇
NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。

例如,在3D空间一个点的坐标[1, 2, 3]是一个秩为1的数组,因为它只有一个轴。那个轴长度为3.又例如,在以下例子中,数组的秩为2(它有两个维度).第一个维度长度为2,第二个维度长度为3.

[[ 1., 0., 0.],
[ 0., 1., 2.]]
NumPy的数组类被称作ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。更多重要ndarray对象属性有:

ndarray.ndim

数组轴的个数,在python的世界中,轴的个数被称作秩

ndarray.shape

数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性

ndarray.size

数组元素的总个数,等于shape属性中元组元素的乘积。

ndarray.dtype

一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。另外NumPy提供它自己的数据类型。

ndarray.itemsize

数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(=64/8),又如,一个元素类型为complex32的数组item属性为4(=32/8).

ndarray.data

包含实际数组元素的缓冲区,通常我们不需要使用这个属性,因为我们总是通过索引来使用数组中的元素。

一个例子1

	>>> from numpy  import *
	>>> a = arange(15).reshape(3, 5)
	>>> a
	array([[ 0,  1,  2,  3,  4],
	       [ 5,  6,  7,  8,  9],
	       [10, 11, 12, 13, 14]])
	>>> a.shape
	(3, 5)
	>>> a.ndim
	2
	>>> a.dtype.name
	'int32'
	>>> a.itemsize
	4
	>>> a.size
	15
	>>> type(a)
	numpy.ndarray
	>>> b = array([6, 7, 8])
	>>> b
	array([6, 7, 8])
	>>> type(b)
	numpy.ndarray

创建数组
有好几种创建数组的方法。

例如,你可以使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。

	>>> from numpy  import *
	>>> a = array( [2,3,4] )
	>>> a
	array([2, 3, 4])
	>>> a.dtype
	dtype('int32')
	>>> b = array([1.2, 3.5, 5.1])
	>>> b.dtype
	dtype('float64')  一个常见的错误包括用多个数值参数调用`array`而不是提供一个由数值组成的列表作为一个参数。
	 
	>>> a = array(1,2,3,4)    # WRONG
	 
	>>> a = array([1,2,3,4])  # RIGHT
	数组将序列包含序列转化成二维的数组,序列包含序列包含序列转化成三维数组等等。
	
	>>> b = array( [ (1.5,2,3), (4,5,6) ] )
	>>> b
	array([[ 1.5,  2. ,  3. ],
	       [ 4. ,  5. ,  6. ]])
	数组类型可以在创建时显示指定
	
	>>> c = array( [ [1,2], [3,4] ], dtype=complex )
	>>> c
	array([[ 1.+0.j,  2.+0.j],
	       [ 3.+0.j,  4.+0.j]])

通常,数组的元素开始都是未知的,但是它的大小已知。因此,NumPy提供了一些使用占位符创建数组的函数。这最小化了扩展数组的需要和高昂的运算代价。

函数function创建一个全是0的数组,函数ones创建一个全1的数组,函数empty创建一个内容随机并且依赖与内存状态的数组。默认创建的数组类型(dtype)都是float64。

	>>> zeros( (3,4) )
	array([[0.,  0.,  0.,  0.],
	       [0.,  0.,  0.,  0.],
	       [0.,  0.,  0.,  0.]])
	>>> ones( (2,3,4), dtype=int16 )                # dtype can also be specified
	array([[[ 1, 1, 1, 1],
	        [ 1, 1, 1, 1],
	        [ 1, 1, 1, 1]],
	       [[ 1, 1, 1, 1],
	        [ 1, 1, 1, 1],
	        [ 1, 1, 1, 1]]], dtype=int16)
	>>> empty( (2,3) )
	array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],
	       [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])
	为了创建一个数列,NumPy提供一个类似arange的函数返回数组而不是列表:
	
	>>> arange( 10, 30, 5 )
	array([10, 15, 20, 25])
	>>> arange( 0, 2, 0.3 )                 # it accepts float arguments
	array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

当arange使用浮点数参数时,由于有限的浮点数精度,通常无法预测获得的元素个数。因此,最好使用函数linspace去接收我们想要的元素个数来代替用range来指定步长。

其它函数array, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, rand, randn, fromfunction, fromfile参考:NumPy示例

打印数组
当你打印一个数组,NumPy以类似嵌套列表的形式显示它,但是呈以下布局:

最后的轴从左到右打印
次后的轴从顶向下打印
剩下的轴从顶向下打印,每个切片通过一个空行与下一个隔开
一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。

	>>> a = arange(6)                         # 1d array
	>>> print a
	[0 1 2 3 4 5]
	>>>
	>>> b = arange(12).reshape(4,3)           # 2d array
	>>> print b
	[[ 0  1  2]
	 [ 3  4  5]
	 [ 6  7  8]
	 [ 9 10 11]]
	>>>
	>>> c = arange(24).reshape(2,3,4)         # 3d array
	>>> print c
	[[[ 0  1  2  3]
	  [ 4  5  6  7]
	  [ 8  9 10 11]]
	 
	 [[12 13 14 15]
	  [16 17 18 19]
	  [20 21 22 23]]]

查看形状操作一节获得有关reshape的更多细节

如果一个数组用来打印太大了,NumPy自动省略中间部分而只打印角落

	>>> print arange(10000)
	[   0    1    2 ..., 9997 9998 9999]
	>>>
	>>> print arange(10000).reshape(100,100)
	[[   0    1    2 ...,   97   98   99]
	 [ 100  101  102 ...,  197  198  199]
	 [ 200  201  202 ...,  297  298  299]
	 ...,
	 [9700 9701 9702 ..., 9797 9798 9799]
	 [9800 9801 9802 ..., 9897 9898 9899]
	 [9900 9901 9902 ..., 9997 9998 9999]]
	禁用NumPy的这种行为并强制打印整个数组,你可以设置printoptions参数来更改打印选项。
	
	>>> set_printoptions(threshold='nan')

基本运算
数组的算术运算是按元素的。新的数组被创建并且被结果填充。

	>>> a = array( [20,30,40,50] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值