没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1、快速入门教程
1.1 先决条件
在阅读本教程之前,你应该了解一些Python的基础知识。如果你想复习一下请回去看看Python教程 。
如果您希望使用本教程中的示例,则还必须在计算机上安装某些软件。有关说明,请参阅
https://scipy.org/install.html 。
1.2 基础知识
NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数
元组索引。在NumPy维度中称为
轴
。
例如,3D空间中的点的坐标 [1, 2, 1] 具有一个轴。该轴有3个元素,所以我们说它的长度为3.在下图
所示的例子中,数组有2个轴。第一轴的长度为2,第二轴的长度为3。
NumPy的数组类被调用 ndarray 。它也被别名所知 array 。请注意, numpy.array 这与标准Python
库类不同 array.array ,后者只处理一维数组并提供较少的功能。 ndarray 对象更重要的属性是:
ndarray.ndim - 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
ndarray.shape - 数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于有 n 行
和 m 列的矩阵, shape 将是 (n,m) 。因此, shape 元组的长度就是rank或维度的个数 ndim 。
ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积。
ndarray.dtype - 一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定
dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
ndarray.itemsize - 数组中每个元素的字节大小。例如,元素为 float64 类型的数组的
itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于
ndarray.dtype.itemsize 。
ndarray.data - 该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用
索引访问数组中的元素。
1.2.1 一个例子
[[ 1., 0., 0.],
[ 0., 1., 2.]]
1
2
>>> import numpy as np
>>> a = np.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
'int64'
1
2
3
4
5
6
7
8
9
10
11
12
1.2.2 数组创建
有几种方法可以创建数组。
例如,你可以使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表
中元素的类型推导出来的。
一个常见的错误,就是调用 array 的时候传入多个数字参数,而不是提供单个数字的列表类型作为参
数。
array 还可以将序列的序列转换成二维数组,将序列的序列的序列转换成三维数组,等等。
也可以在创建时显式指定数组的类型:
通常,数组的元素最初是未知的,但它的大小是已知的。因此,NumPy提供了几个函数来创建具有初
始占位符内容的数组。这就减少了数组增长的必要,因为数组增长的操作花费很大。
函数 zeros 创建一个由0组成的数组,函数 ones 创建一个完整的数组,函数 empty 创建一个数组,其
初始内容是随机的,取决于内存的状态。默认情况下,创建的数组的dtype是 float64 类型的。
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>
13
14
15
16
17
18
19
20
21
22
23
>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')
1
2
3
4
5
6
7
8
9
>>> a = np.array(1,2,3,4) # WRONG
>>> a = np.array([1,2,3,4]) # RIGHT
1
2
>>> b = np.array([(1.5,2,3), (4,5,6)])
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
1
2
3
4
>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
1
2
3
4
为了创建数字组成的数组,NumPy提供了一个类似于 range 的函数,该函数返回数组而不是列表。
当 arange 与浮点参数一起使用时,由于有限的浮点精度,通常不可能预测所获得的元素的数量。出于
这个原因,通常最好使用 linspace 函数来接收我们想要的元素数量的函数,而不是步长(step):
另见这些API
array , zeros , zeros_like , ones , ones_like , empty , empty_like , arange ,
linspace , numpy.random.mtrand.RandomState.rand ,
numpy.random.mtrand.RandomState.randn , fromfunction , fromfile
1.2.3 打印数组
当您打印数组时,NumPy以与嵌套列表类似的方式显示它,但具有以下布局:
最后一个轴从左到右打印,
倒数第二个从上到下打印,
其余部分也从上到下打印,每个切片用空行分隔。
然后将一维数组打印为行,将二维数据打印为矩阵,将三维数据打印为矩数组表。
>>> np.zeros( (3,4) )
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones( (2,3,4), dtype=np.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)
>>> np.empty( (2,3) ) # uninitialized,
output may vary
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 ) # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
1
2
3
4
>>> from numpy import pi
>>> np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>> x = np.linspace( 0, 2*pi, 100 ) # useful to evaluate function at
lots of points
>>> f = np.sin(x)
1
2
3
4
5
>>> a = np.arange(6) # 1d array
>>> print(a)
[0 1 2 3 4 5]
>>> b = np.arange(12).reshape(4,3) # 2d array
1
2
3
4
5
有关 reshape 的详情,请参阅下文。
如果数组太大而无法打印,NumPy会自动跳过数组的中心部分并仅打印角点:
要禁用此行为并强制NumPy打印整个数组,可以使用更改打印选项 set_printoptions 。
1.2.4 基本操作
数组上的算术运算符会应用到
元
素
级别。下面是创建一个新数组并填充结果的示例:
>>> print(b)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
>>> c = np.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]]]
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> print(np.arange(10000))
[ 0 1 2 ..., 9997 9998 9999]
>>> print(np.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]]
1
2
3
4
5
6
7
8
9
10
11
>>> np.set_printoptions(threshold=sys.maxsize) # sys module should be
imported
1
>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False])
1
2
3
4
5
6
7
8
9
10
11
12
13
与许多矩阵语言不同,乘积运算符 * 在NumPy数组中按元素进行运算。矩阵乘积可以使用 @ 运算符
(在python> = 3.5中)或 dot 函数或方法执行:
某些操作(例如 += 和 *= )会更直接更改被操作的矩阵数组而不会创建新矩阵数组。
当使用不同类型的数组进行操作时,结果数组的类型对应于更一般或更精确的数组(称为向上转换的行
为)。
>>> A = np.array( [[1,1],
... [0,1]] )
>>> B = np.array( [[2,0],
... [3,4]] )
>>> A * B # elementwise product
array([[2, 0],
[0, 4]])
>>> A @ B # matrix product
array([[5, 4],
[3, 4]])
>>> A.dot(B) # another matrix product
array([[5, 4],
[3, 4]])
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
[3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022 , 3.72032449, 3.00011437],
[ 3.30233257, 3.14675589, 3.09233859]])
>>> a += b # b is not automatically converted to integer
type
Traceback (most recent call last):
...
TypeError: Cannot cast ufunc add output from dtype('float64') to
dtype('int64') with casting rule 'same_kind'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> a = np.ones(3, dtype=np.int32)
>>> b = np.linspace(0,pi,3)
>>> b.dtype.name
'float64'
>>> c = a+b
>>> c
array([ 1. , 2.57079633, 4.14159265])
>>> c.dtype.name
'float64'
>>> d = np.exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
-0.54030231-0.84147098j])
>>> d.dtype.name
'complex128'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
剩余240页未读,继续阅读
资源评论
- 七百攻的卉卉酱2020-12-05挺号,就是官网的
ViatorSun
- 粉丝: 9773
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功