操作 numpy 数组的常用函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作numpy 数组的常用函数

操作numpy 数组的常用函数

where

使用where 函数能将索引掩码转换成索引位置:indices = where(mask)

indices

=> (array([11, 12, 13, 14]),)

x[indices] # this indexing is equivalent to the fancy indexing x[mask]

=> array([ 5.5, 6. , 6.5, 7. ])diag

使用diag 函数能够提取出数组的对角线:

diag(A)

=> array([ 0, 11, 22, 33, 44])

diag(A, -1)array([10, 21, 32, 43])take

take 函数与高级索引(fancy indexing)用法相似:

v2 = arange(-3,3)

v2

=> array([-3, -2, -1, 0, 1, 2])

row_indices = [1, 3, 5]

v2[row_indices] # fancy indexing

=> array([-2, 0, 2])

v2.take(row_indices)

=> array([-2, 0, 2])但是take 也可以用在list 和其它对象上:

take([-3, -2, -1, 0, 1, 2], row_indices)

=> array([-2, 0, 2])choose

选取多个数组的部分组成新的数组:

which = [1, 0, 1, 0]

choices = [[-2,-2,-2,-2], [5,5,5,5]]

choose(which, choices)

=> array([ 5, -2, 5, -2])线性代数

矢量化是用Python/Numpy 编写高效数值计算代码的关键,

这意味着在程序中尽量选择使用矩阵或者向量进行运算,比如矩阵乘法等。

标量运算

我们可以使用一般的算数运算符,比如加减乘除,对数组进行标量运算。

v1 = arange(0, 5)

v1 * 2

=> array([0, 2, 4, 6, 8])

v1 + 2

=> array([2, 3, 4, 5, 6])

A * 2, A + 2

=> (array([[ 0, 2, 4, 6, 8],

[20, 22, 24, 26, 28],

[40, 42, 44, 46, 48],

[60, 62, 64, 66, 68],

[80, 82, 84, 86, 88]]),

array([[ 2, 3, 4, 5, 6],

[12, 13, 14, 15, 16],

[22, 23, 24, 25, 26],

[32, 33, 34, 35, 36],

[42, 43, 44, 45, 46]]))Element-wise(逐项乘) 数组-数组运算

当我们在矩阵间进行加减乘除时,它的默认行为是element-wise(逐项乘) 的:

A * A # element-wise multiplication

=> array([[ 0, 1, 4, 9, 16],

[ 100, 121, 144, 169, 196],

[ 400, 441, 484, 529, 576],

[ 900, 961, 1024, 1089, 1156],

[1600, 1681, 1764, 1849, 1936]])

v1 * v1

=> array([ 0, 1, 4, 9, 16])

A.shape, v1.shape

=> ((5, 5), (5,))

A * v1

=> array([[ 0, 1, 4, 9, 16],

[ 0, 11, 24, 39, 56],

[ 0, 21, 44, 69, 96],

[ 0, 31, 64, 99, 136],

[ 0, 41, 84, 129, 176]])矩阵代数

矩阵乘法要怎么办? 有两种方法。

1.使用dot 函数进行矩阵-矩阵,矩阵-向量,数量积乘法:

dot(A, A)

=> array([[ 300, 310, 320, 330, 340],

[1300, 1360, 1420, 1480, 1540],

[2300, 2410, 2520, 2630, 2740],

[3300, 3460, 3620, 3780, 3940],

[4300, 4510, 4720, 4930, 5140]])

dot(A, v1)

=> array([ 30, 130, 230, 330, 430])

dot(v1, v1)

=> 302.将数组对象映射到matrix 类型。M = matrix(A)

v = matrix(v1).T # make it a column vector

v

=> matrix([[0],

[1],

[2],

[3],

[4]])

M * M

=> matrix([[ 300, 310, 320, 330, 340],

[1300, 1360, 1420, 1480, 1540],

[2300, 2410, 2520, 2630, 2740],

[3300, 3460, 3620, 3780, 3940],

[4300, 4510, 4720, 4930, 5140]])

相关文档
最新文档