学习numpy快速入门教程 心得体会(4)

一、线性代数中的简单数组操作

这部分内容,在之前的学习笔记中已经有过部分涉及,这里介绍一些与线性代数有较大联系的数组操作。另外,再次说明一点,与其他矩阵语言不同,numpy中矩阵乘法符号为“@”。

import numpy as np
a = np.arange(4).reshape(2, 2)
print(a.transpose())     #矩阵转置
print(np.linalg.inv(a))  #求矩阵的逆

u = np.eye(3)            #构造3阶单位矩阵
print(u)
print(np.trace(u))       #求矩阵的迹

y = np.array([[5], [7]])
print(np.linalg.solve(a, y)) #求解线性矩阵方程


#输出:
[[0 2]
 [1 3]]
[[-1.5  0.5]
 [ 1.   0. ]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
3.0
[[-4.]
 [ 5.]]

二、其他索引技巧

1.使用索引数组进行索引

numpy除了之前简单的通过整数和切片索引外,还可以通过数组来进行索引,例子如下:

import numpy as np
a = np.arange(6)**3
print(a)
i = np.array([1, 3, 2, 5, 4])  #设置简单的一维数组
print(a[i]) 

j = np.array([[3, 4], [1, 2]]) #设置二维的数组
print(a[j])


#输出:
[  0   1   8  27  64 125]
[  1  27   8 125  64]
[[27 64]
 [ 1  8]]

简单说明:a[i]返回的是一个数组。如上图例子中i取1,对应a[1]为1;i取3,对应a[3]为27;i取2,对应a[2]取8...以此索引,最终从完整的数组a中返回一个对应数组i中元素索引的数组。对于二维的数组进行数组索引也是同样的道理。

除此之外,当a为多维数组时,单个索引数组指的是第一个维度a,具体示例如下:

import numpy as np
palette = np.array([[0, 0, 0],
                    [255, 0, 0],
                    [0, 255, 0],
                    [0, 0, 255],
                    [255, 255, 255]])
image = np.array([[0, 1, 2, 0],
                 [0, 3, 4, 0]])
print(palette[image])


#输出:
[[[  0   0   0]
  [255   0   0]
  [  0 255   0]
  [  0   0   0]]

 [[  0   0   0]
  [  0   0 255]
  [255 255 255]
  [  0   0   0]]]

简单说明:image数组中第一行为[0, 1,  2 , 0],分别对应数组a[0]:[0 0  0]   a[1]:[255 0 0]   a[2]:[0 255 0]   a[0]:[0 0 0];第二行为[0, 3, 4, 0]分别对应数组a[0]:[0 0 0]   a[3]:[0 0 255]   a[4]:[255 255 255]   a[0]:[0 0 0]

2.使用布尔数组进行所引

废话不多说,直接看第一种方法的示例:

import numpy as np
a = np.arange(12).reshape(3, 4)
b = a > 4   #设置筛选条件
print(b)
print(a[b]) #对应筛选条件得到数组
a[b] = 0    #属性分配
print(a)


#输出:
[[False False False False]
 [False  True  True  True]
 [ True  True  True  True]]
[ 5  6  7  8  9 10 11]
[[0 1 2 3]
 [4 0 0 0]
 [0 0 0 0]]


除此之外,用布尔值进行索引的第二种方法更类似于整数索引; 对于数组的每个维度,我们给出一个1D布尔数组,选择我们想要的切片:

import numpy as np
a = np.arange(12).reshape(3, 4)
b1 = np.array([False, True, True]) #设置第一维度的筛选条件
b2 = np.array([True, False, True, False]) #设置第二维度的筛选条件
print(a[b1, :])
print(a[:, b2])
print(a[b1, b2])


#输出:
[[ 4  5  6  7]
 [ 8  9 10 11]]
[[ 0  2]
 [ 4  6]
 [ 8 10]]
[ 4 10]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值