Advanced indexing and index tricks部分
英文官方教程链接
https://numpy.org/doc/stable/user/quickstart.htmlhttps://numpy.org/doc/stable/user/quickstart.html如有侵权,务必联系删除。
不仅可以想我之前提到的用python中的切片方法获取元素,也可以定义一个数组(我称它为索引数组),用这个索引数组来获得对应的元素。这就比python更加高级和灵活了。毕竟python列表中一次只能获得一个索引值,代码中的索引可能还符合某种规律,不能像这样一次性灵活地取值。
import numpy as np
a = np.arange(0,10,2)
b = np.array([1,2,4])
print(a)
#[0 2 4 6 8]
print(a[b])
#[2 4 8] 取出了索引为1,2,4的元素
还可以通过索引,对指定数组元素进行赋值。注意,这里的索引必须是python列表或numpy数组,如果使用元组的话,它会认为你给的是一个shape(形状),这样就会报维数不匹配的错误。而赋的值可以是一个数、列表、numpy数组、元组。
import numpy as np
a = np.array([1,2,3,4,5])
a[[0,2,4]] = 0
print(a)
#[0 2 0 4 0] 指定将索引维0,2,4位置的元素置为0
a[[0,2,4]] = [0,3,8]
print(a)
#[0 2 3 4 8] 也可以指定赋多个值
#另外也可以用这种方法对指定元素进行运算,这里我就不试了
Tricks and Tips部分
再深度学习领域,我觉得比较常用且有用的一点就是,numpy数组再你不知道它的形状的情况下,可以通过指定某一维为-1,那么那一维就会自动生成,但前提是只有这一维是当你在指定的过程中所未知的,也就是只能有一个-1。
import numpy as np
a = np.array([[[0,1],[2,3]],[[1,2],[3,4]],[[2,3],[4,5]]])
print(a.shape)
#(3, 2, 2)
b = a.reshape(2,3,-1)
print(b.shape)
#(2, 3, 2)
print(b)
#[[[0 1]
# [2 3]
# [1 2]]
# [[3 4]
# [2 3]
# [4 5]]] 正如我之前说的,他好像真的是将所有元素取出,然后按要求填空
More information
此部分英文官方教程链接
https://numpy.org/doc/stable/user/absolute_beginners.htmlhttps://numpy.org/doc/stable/user/absolute_beginners.html这里还有个拼接数组的函数,这个也很有用,我记得我之前说过一个用堆砌函数的连接,现在想想,好像没这个准确。注意,传入的参数是元组,我第一次用的时候就用错了。
import numpy as np
a = np.array([0,1,2,3])
b = np.array([1,2])
print(np.concatenate(a,b))
#[0 1 2 3 1 2]
#这也可以传参的时候指定拼接的维度,要注意维度对应才能拼接
增加数组的维度也是特别有用的,我在学习计算机视觉的时候就经常看到别人的代码里总是会用到这种操作,因为有的时候,要对数组运算,但是又要保证除广播机制以外的情况也可以运行。这里我只列举我经常看到别人使用的一个。
import numpy as np
a = np.array([1,2,3])
b = np.expand_dims(a,axis=1)
print(b.shape)
#(3,1)
print(b)
#[[1]
# [2]
# [3]] 也就是在指定的维度索引处增加维度,但是不能超过原有维度+1
#我觉得这里用轴的概念好理解一些,就是不能超过轴数+1
#更高维的情况大家也可以自己试试,我觉得这个自己试才能理解得更好
How to save and load NumPy objects部分
个人认为这也是很重要的一部分。数据信息往往要保存以备后用。就比如说,之前我用自己的电脑训练yolo,但是我的电脑带不动那么多的图片,最后不知不觉电量耗光了,但是我人不在,结果中断前的数据没保存,白等了整整8个小时。保存的是.npy文件,也可以指定为.csv文件(也就是excel表格)。保存的数组用的是科学计数法。
import numpy as np
a = np.array([1,2,4,8])
b = np.save('numpy_file',a)
c = np.load('numpy_file.npy')
print(np.all(c==a)) #这个函数是用来判断是否所有值都为真,只返回真假
#True
d = np.savetxt('numpy_file1.csv',a)
e = np.loadtxt('numpy_file1.csv')
print(np.all(e==a))
#True
Intrinsic NumPy array creation functions部分
英文官方教程
https://numpy.org/doc/stable/user/basics.creation.htmlhttps://numpy.org/doc/stable/user/basics.creation.html我觉得比较有意思的一个创建恒等矩阵的函数,我没用过,不知道是不是经常用,不过我觉得在数学上很重要,在计算机科学上也不例外吧。不过,numpy创建的恒等矩阵是从左上角开始-45°方向全1,其余为0,均为浮点数。这里我建议创建或者对师叔祖操作的时候最好将她们全部转换为浮点型,省得出现不必要的麻烦。
import numpy as np
a = np.eye(4)
print(a)
#[[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]]
b = np.eye(2,4)
print(b)
#[[1. 0. 0. 0.]
# [0. 1. 0. 0.]]