操作 numpy 数组的常用函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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]])