Numpy 入门教程(1)

本文介绍了NumPy的基础知识,包括多维数组的操作、属性介绍及数组的生成方法等。通过实例展示了如何使用NumPy进行科学计算。

翻译自官方文档Tentative NumPy Tutorial,有删节。

Numpy 入门教程

NumPy 提供了对多维数组的支持,与Python原生支持的List类型不同,数组的所有元素必须同样的类型。数组的维度被称为axes,维数称为 rank。 

Numpy的数组类型为 ndarray, ndarray 的重要属性包括

  • ndarray.ndim:数组的维数,也称为rank
  • ndarray.shape:数组各维的大小tuple 类型,对一个列的矩阵来说, shape 为 (n,m)
  • ndarray.size:元素的总数。 
  • Ndarray.dtype:每个元素的类型,可以是 numpy.int32, numpy.int16, and numpy.float64 等。 
  • Ndarray.itemsize:每个元素占用的字节数。
  • Ndarray.data:指向数据内存。

 

一个简单的例子:

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> from numpy  import *  
  2. >>> a = arange(15).reshape(35)  
  3. >>> a  
  4. array([[ 0,  1,  2,  3,  4],  
  5.        [ 5,  6,  7,  8,  9],  
  6.        [1011121314]])  
  7. >>> a.shape  
  8. (35)  
  9. >>> a.ndim  
  10. 2  
  11. >>> a.dtype.name  
  12. 'int32'  
  13. >>> a.itemsize  
  14. 4  
  15. >>> a.size  
  16. 15  
  17. >>> type(a)  
  18. numpy.ndarray  
  19. >>> b = array([678])  
  20. >>> b  
  21. array([678])  
  22. >>> type(b)  
  23. numpy.ndarray  


生成数组

有许多种方法生成数组。比如,可以将Python list 或 tuple 转化为数组,转化后的数组元素的类型由原来的对象的类型来决定。

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> from numpy  import *  
  2. >>> a = array( [2,3,4] )  
  3. >>> a  
  4. array([234])  
  5. >>> a.dtype  
  6. dtype('int32')  
  7. >>> b = array([1.23.55.1])  
  8. >>> b.dtype  
  9. dtype('float64')  
  10. >>> b = array( [ (1.5,2,3), (4,5,6) ] )  
  11. >>> b  
  12. array([[ 1.5,  2. ,  3. ],  
  13.        [ 4. ,  5. ,  6. ]])  

生成数组时也可以指定元素的数据类型

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> c = array( [ [1,2], [3,4] ], dtype=complex )  
  2. >>> c  
  3. array([[ 1.+0.j,  2.+0.j],  
  4.        [ 3.+0.j,  4.+0.j]])  

通常,我们无法事先知道数组元素的具体值,但是数组大小是已知的。 这时可以用下面几种方法生成数组。 

zeros 函数生成元素全部为0的数组,ones函数生成元素全部为1的数组empty函数生成元素没有赋值的数组,这时元素值由内存中原来的内容决定。 默认的,生成的数组的元素类型为float64.

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> zeros( (3,4) )  
  2. array([[0.,  0.,  0.,  0.],  
  3.        [0.,  0.,  0.,  0.],  
  4.        [0.,  0.,  0.,  0.]])  
  5. >>> ones( (2,3,4), dtype=int16 )                # dtype can also be specified  
  6. array([[[ 1111],  
  7.         [ 1111],  
  8.         [ 1111]],  
  9.        [[ 1111],  
  10.         [ 1111],  
  11.         [ 1111]]], dtype=int16)  
  12. >>> empty( (2,3) )  
  13. array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],  
  14.        [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])  

arange 函数生成的数组的元素按照等比数列排布,类似于 range函数。

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> arange( 10305 )  
  2. array([10152025])  
  3. >>> arange( 020.3 )                 # it accepts float arguments  
  4. array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])  

linspace 函数有些类似matlab中的同名函数,下面是个例子

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> linspace( 029 )                 # 9 numbers from 0 to 2  
  2. array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])  
  3. >>> x = linspace( 02*pi, 100 )        # useful to evaluate function at lots of points  
  4. >>> f = sin(x)  

屏幕输出 Arrays

当用print 打印一个 array输出结果类似于 lists: 

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> a = arange(6)                         # 1d array  
  2. >>> print a  
  3. [0 1 2 3 4 5]  
  4. >>>  
  5. >>> b = arange(12).reshape(4,3)           # 2d array  
  6. >>> print b  
  7. [[ 0  1  2]  
  8.  [ 3  4  5]  
  9.  [ 6  7  8]  
  10.  [ 9 10 11]]  
  11. >>>  
  12. >>> c = arange(24).reshape(2,3,4)         # 3d array  
  13. >>> print c  
  14. [[[ 0  1  2  3]  
  15.   [ 4  5  6  7]  
  16.   [ 8  9 10 11]]  
  17.   
  18.  [[12 13 14 15]  
  19.   [16 17 18 19]  
  20.   [20 21 22 23]]]  

如果数组过大,显示时会有一些省略号

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> print arange(10000)  
  2. [   0    1    2 ..., 9997 9998 9999]  
  3. >>>  
  4. >>> print arange(10000).reshape(100,100)  
  5. [[   0    1    2 ...,   97   98   99]  
  6.  [ 100  101  102 ...,  197  198  199]  
  7.  [ 200  201  202 ...,  297  298  299]  
  8.  ...,  
  9.  [9700 9701 9702 ..., 9797 9798 9799]  
  10.  [9800 9801 9802 ..., 9897 9898 9899]  
  11.  [9900 9901 9902 ..., 9997 9998 9999]]  

如果我们需要显示完整的数组,可以如下设置 

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> set_printoptions(threshold='nan')  



<think> 我们正在处理用户关于NumPy入门教程的请求。用户希望获得NumPy入门教程,并且我们有一些参考引用,这些引用展示了NumPy的基本操作,如数组创建、数组属性、求和以及堆叠等。 根据用户提供的引用,我们可以总结出一些NumPy的基础知识点,并据此构建一个入门教程。 教程应包含以下内容: 1. NumPy简介 2. 安装NumPy 3. 创建数组 4. 数组属性 5. 数组的基本运算(如求和) 6. 数组操作(如reshape, vstack等) 我们将按照这些主题组织教程,每个部分给出示例代码(使用引用中的例子并适当扩展),并确保代码格式正确。 注意:用户引用的内容中,引用[1]和[2]都提到了使用`np.arange(15).reshape(...)`创建数组,引用[1]展示了求和(包括按轴求和),引用[4]展示了vstack的用法。引用[3]介绍了NumPy的概述和属性。 教程结构: 1. NumPy简介 2. 安装NumPy 3. 创建数组(使用arange, reshape等) 4. 数组属性(如shape, dtype等) 5. 数组的基本运算(如求和、按轴求和) 6. 数组操作(如vstack, hstack等) 同时,按照要求,在教程结束后生成相关问题。 注意:在回答中,对于引用的内容,我们在末尾添加引用标识[^1],[^2]等,但注意用户提供的引用编号与内容对应关系。 用户提供的引用有4个,我们使用对应编号。但是,请注意,用户引用中的内容我们只是参考,实际教程需要结合这些内容进行编写。 </think> ### NumPy 入门教程 NumPy 是 Python 科学计算的核心库,专注于高性能多维数组操作和数学函数。以下是关键知识点及示例: --- #### 1. **安装与导入** ```python pip install numpy # 安装命令 import numpy as np # 导入约定 ``` #### 2. **数组创建** - **基本创建** ```python a = np.array([1, 2, 3]) # 一维数组 [1, 2, 3] b = np.arange(15) # 序列数组 [0,1,...,14] c = b.reshape(3, 5) # 重塑为 3x5 二维数组[^2] ``` 输出: ``` [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] ``` - **特殊数组** ```python np.zeros((2,3)) # 2x3 零矩阵 np.eye(3) # 3x3 单位矩阵 ``` --- #### 3. **数组属性** ```python arr = np.arange(15).reshape(3,5) print(arr.shape) # 维度 (3,5) print(arr.dtype) # 数据类型 int32/64[^3] print(arr.size) # 元素总数 15 ``` --- #### 4. **数学运算** - **聚合计算** ```python arr = np.arange(15).reshape(3,5) print(arr.sum()) # 总和 105[^1] print(arr.sum(axis=0)) # 列和 [15, 18, 21, 24, 27][^1] print(arr.sum(axis=1)) # 行和 [10, 35, 60][^1] ``` - **广播机制**(自动扩展维度) ```python arr * 2 # 所有元素乘以2 arr + np.array([1,2,3,4,5]) # 每行加[1,2,3,4,5] ``` --- #### 5. **数组操作** - **堆叠** ```python a = np.array([[1,2],[3,4]]) b = np.array([[5,6],[7,8]]) c = np.vstack((a,b)) # 垂直堆叠[^4] d = np.hstack((a,b)) # 水平堆叠 ``` 输出 `c`: ``` [[1 2] [3 4] [5 6] [7 8]] ``` - **索引切片** ```python arr = np.arange(15).reshape(3,5) arr[1, 2:4] # 第2行,第3-4列 → [7,8] arr[:, 1] # 所有行的第2列 → [1,6,11] ``` --- #### 6. **线性代数** ```python A = np.array([[1,2],[3,4]]) B = np.array([[5,6],[7,8]]) np.dot(A, B) # 矩阵乘法 np.linalg.inv(A) # 矩阵求逆 ``` --- ### 学习路径建议 1. 掌握数组创建与变形 2. 熟练使用聚合函数(`sum`, `mean`, `max`) 3. 理解广播机制和轴(`axis`)操作 4. 练习矩阵运算和索引技巧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值