作者:欧新宇(Xinyu OU)
本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz
Numpy的核心是什么?=====> ndarry数组,也就是说numpy最重要的数据结构就是称为ndarray的n-dim数组,它由两个部分构成: 1). 元数组部分:存储着当前ndarray对象的描述信息; 2). 数据部分:存储着当前ndarry对象的真实数据。
import numpy as np
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
display(x)
print("x = \n{}".format(x))
x.shape
x.size
x.dtype
x.ndim
x = list(range(1000000))
%timeit [i**2 for i in x]
import numpy as np
y = np.arange(1000000)
%timeit y**2
可以看到numpy的执行效率要远优于python内置的list。
import numpy as np
# 一维数组
a = np.array([1, 2, 3, 4, 5, 6])
print("我是一个维度为{}的一维数组:\n{}".format(a.ndim, a))
# 二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print("我是一个维度为{}的二维数组:\n{}".format(b.ndim, b))
# 三维数组
c = np.array([[[1,2,3], [4,5,6],[7,8,9]],[[1,2,3], [4,5,6],[7,8,9]]])
print('我是一个维度为{}的三维数组:\n{}'.format(c.ndim, c))
# 分别从一维、二维、三维数组中获取元素值为 "6" 的方法
import numpy as np
print('我是一维数组的{}'.format(a[5]))
print('我是二维数组的{}'.format(b[1][2]))
print('我是三维数组的{}'.format(c[0][1][2]))
import numpy as np
array1 = [1,2,3]
a = np.array(array1)
display(a)
array2 = [[1,2,3],[4,5,6]]
b = np.array(array2)
display(b)
结论如下:
注意:arange()函数的步长,可以是浮点数,但是range()函数的步长,不能是浮点数
# 正向递增
list1 = list(range(1,10,2))
display(list1)
# 浮点型正向递增
list2 = list(range(1,10,0.5))
display(list2)
# 反向递减
list3 = list(range(10,1,-2))
display(list3)
# 正向递增
array1 = np.arange(1,10,2)
display(array1)
# 浮点型正向递增
array2 = np.arange(1,10,0.5)
display(array2)
# 反向递减
array3 = np.arange(10,1,-2)
display(array3)
array1 = np.zeros((3,4))
display(array1)
array2 = np.ones((3,4))
display(array2)
array1 = np.full((3,4),1.2)
display(array3)
注意:此处以创建二维数组为例,你传入一个数字,就可以创建一维数组;你传入三个数字,就可以创建三维数组,可以自己下去试一试。
## np.eye(x)和 np.identity(x)
array1 = np.eye(3)
display(array1)
array2 = np.identity(4)
display(array2)
np.arange()取不到最大的那个值stop,np.linspace()默认可以取到最大值stop;
array1 = np.arange(1,15,3)
display(array1)
display(array1.dtype)
array2 = np.linspace(1,15,3)
display(array2)
display(array2.dtype)
## 定义一个函数
def f(x, y):
return x * 2 + y + 1
## 从一个函数生成一个二维数组;
b = np.fromfunction(f, (3,3), dtype=np.int32)
display(b)
## 在这个函数,f函数要接收的参数,就是当前元素的坐标;
## 0行0列,传入的就是x=0,y=0;
## 0行1列,传入的就是x=0,y=1;
## 3行2列,传入的就是x=3,y=2;