numpy的基本介绍
numpy最重要的是一个多维数组,ndarray对象 数组可以理解为列表,多维数组就是列表嵌套列表 出现的原因是numpy底层使用的是C 语言编写 和python里的list比较, 执行效率要高的多的多的多。
导入模块
import numpy as np(习惯改个名字 简单一点)
用jupyter 的里%timeit 计算代码运行的时间
%timeit sum(range(1000000))
#35 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit np.sum(np.arange(1000000))
#2.24 ms ± 125 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
numpy里的求和的效率比直接使用sum的效率高了十倍不止。
numpy里最重要的数据结构是ndarray 这是一个多维数组
ndarray 的创建方式
1, 直接调用 numpy 里的array 方法得到一个ndarray对象
a = np.array(
[[
[2,3,4],
[2,3,4]
],
[
[2,3,4],
[2,3,4]
]]
)
打印出来的 a是一个(2,2,3)的一个列表
[[[2 3 4]
[2 3 4]]
[[2 3 4]
[2 3 4]]]
2,full 和full_like 方法,需要shape和fill_value两个参数
b = np.full(shape=(5,2), fill_value=['77','7'])
c = np.full_like(a,fill_value=[7])
打印出来b = [[‘77’ ‘7’]
[‘77’ ‘7’]
[‘77’ ‘7’]
[‘77’ ‘7’]
[‘77’ ‘7’]]
c = array([[[7, 7, 7],
[7, 7, 7]],
[[7, 7, 7],
[7, 7, 7]]])
这里因为我实在jupyter’里面 直接打印了c 我用了print打印了b
3,ones 和 ones_like
d = np.ones(shape=(4,4))
返回一个(4,4)的列表 元素都是1
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
4,zeros 和 zeros_like
和ones 是一样的 只是里面的元素用0 填充
5,arange 生成指定序列数组
np.arange(2, 10).reshape(2,4)
# 这是生成一个形状是(2,4) 元素是[2,10)的一个列表
#array([[2, 3, 4, 5],
# [6, 7, 8, 9]])
np.random.normal(loc=7, size=(2,3,3))
#loc 是指定接近给定的数据
# 这是生成随机数 接近 7 的随机数 形状是(2,3,3)的
#array([[[6.8208245 , 6.04934953, 7.68211542],
# [6.23931205, 9.47065395, 5.08243697],
# [6.51084257, 7.04377684, 7.31366509]],
#
# [[5.72961768, 6.54448095, 6.23690148],
# [6.07553398, 7.93632722, 5.84778843],
# [6.69124011, 7.10721062, 6.15648761]]])
6, random 使用随机数生成序列, random可以指定 shape 里的参数
np.random.randint((2,10),size=(4,2))
# randint是使用 size 这个参数 效果和shape是一样的
#array([[0, 5],
# [0, 3],
# [1, 7],
# [1, 0]])
7,linspace 生成一个等差数列的数组
np.linspace(10, 100, num=12)
# [10,100] 分成12分的等差数列
#array([ 10. , 18.18181818, 26.36363636, 34.54545455,
# 42.72727273, 50.90909091, 59.09090909, 67.27272727,
# 75.45454545, 83.63636364, 91.81818182, 100. ])
8, eye 生成一个对角为一的矩阵
np.eye(4, 6, k=1) # k 默认是 0
k 等于几 就从第一排的第几个开始取对角 对角用1 填充 其他的用0 填充
#array([[0., 1., 0., 0., 0., 0.],
# [0., 0., 1., 0., 0., 0.],
# [0., 0., 0., 1., 0., 0.],
# [0., 0., 0., 0., 1., 0.]])
9, diag 将数组拆成对角矩阵
np.diag([1,2,3,4], k=1) #k 默认是0
# 用传入的数据作为对角矩阵的对角数据
#array([[0, 1, 0, 0, 0],
# [0, 0, 2, 0, 0],
# [0, 0, 0, 3, 0],
# [0, 0, 0, 0, 4],
# [0, 0, 0, 0, 0]])