- numpy
- import numpy as np
- shop_price = [30, 20, 15, 40]
- shop_num = [2, 3, 1, 4]
安装 Anacondahttps https://www.anaconda.com/distribution/
快捷键
向下添加一个单元格, 按 esc 进入命令行模式, 再按 b 向下添加
向下添加一个单元格, 按 esc 进入命令行模式, 再按 a 向上添加
向下添加一个单元格, 按 esc 进入命令行模式, 再按 dd 删除单元格
代码模式转成 Markdown 模式, 按 esc 进入命令行模式, 按 m, 转换成 Markdown
shift + enter: 运行当前代码并选中下一个单元格
ctrl + enter: 运行当前代码
一维数组
- >>> np_shop_price = np.array(shop_price)
- >>> np_shop_price
- array([30, 20, 15, 40])
- >>> np_shop_num = np.array(shop_num)
- >>> np_shop_num
- array([2, 3, 1, 4])
数组之间可以进行向量运算
- >>> np_shop_price = np.array(shop_price)
- >>> np_shop_num = np.array(shop_num)
- >>> np_shop_price * np_shop_num
- array([ 60, 60, 15, 160])
- >>> np.sum(np_shop_price * np_shop_num)
- 295
向量运算必须一一运算
python 中, 数组就是列表, 列表之间的运算叫向量运算, 2 个列表的元素数量必须是一样的, 否则就会报错
- >>> a1 = np.array([1,2,3,4])
- >>> a2 = np.array([1,2,3])
- >>> a1*a2
- ---------------------------------------------------------------------------
- ValueError Traceback (most recent call last)
- <ipython-input-18-d8f7a8f74ee5> in <module>
- ----> 1 a1*a2
- ValueError: operands could not be broadcast together with shapes (4,) (3,)
numpy 的基本属性
- >>> a1 = np.array([1,2,3,4])
- >>> a1
- array([1, 2, 3, 4])
- >>> a2 = np.array([[1,2,3,4],[5,6,7,8]])
- >>> a2
- array([[1, 2, 3, 4],
- [5, 6, 7, 8]])
数组元素的数据类型
- >>> a1.dtype
- dtype('int32')
数组元素的个数
- >>> a1.size
- 4
- >>> a2.size
- 8
数组的维数, 是一维数组还是二维数组
- >>> a1.ndim
- 1
- >>> a2.ndim
- 2
数组的维度大小, 以元组的形式表示
- >>> a1.shape
- (4,)
- >>> a2.shape (行数, 列数)
- (2, 4)
数组的转置 (将二维数组以上的数组的数据结构的行和列对调)
- >>> a2
- array([[1, 2, 3, 4],
- [5, 6, 7, 8]])
- >>> a2.shape (行数, 列数)
- (2, 4)
- >>> a2.T (列数, 行数)
- array([[1, 5],
- [2, 6],
- [3, 7],
- [4, 8]])
创建 numpy 的几种方式
array
将列表转换为数组
创建整数类型的数组
- >>> a3 = np.array([1,2,3,4])
- >>> a3
- array([1, 2, 3, 4])
创建浮点类型的数组
- >>> a3 = np.array([1,2,3,4], dtype='float')
- >>> a3
- array([1., 2., 3., 4.])
将浮点类型的数组转换为整数类型的数组
>>> a3.astype('int') 转换数据类型为 int
- array([1, 2, 3, 4])
- arrange
和 range 函数用法一样, 在 numpy 中使用 arrange
创建 0, 1, 2 组成的数组
- >>> np.arange(3)
- array([0, 1, 2])
创建 3 到 7 之间的数组成的数组, 步长为 2
- >>> np.arange(3,7,2)
- array([3, 5])
- linspace
将一定范围内的数根据数组设置的长度平均做除法得到数组内的每个元素, 默认分成 50 份
创建 2 到 10 之间的数组成的数组, 数组长度为 50
- >>> np.linspace(2,10)
- array([ 2. , 2.16326531, 2.32653061, 2.48979592, 2.65306122,
- 2.81632653, 2.97959184, 3.14285714, 3.30612245, 3.46938776,
- 3.63265306, 3.79591837, 3.95918367, 4.12244898, 4.28571429,
- 4.44897959, 4.6122449 , 4.7755102 , 4.93877551, 5.10204082,
- 5.26530612, 5.42857143, 5.59183673, 5.75510204, 5.91836735,
- 6.08163265, 6.24489796, 6.40816327, 6.57142857, 6.73469388,
- 6.89795918, 7.06122449, 7.2244898 , 7.3877551 , 7.55102041,
- 7.71428571, 7.87755102, 8.04081633, 8.20408163, 8.36734694,
- 8.53061224, 8.69387755, 8.85714286, 9.02040816, 9.18367347,
- 9.34693878, 9.51020408, 9.67346939, 9.83673469, 10. ])
- >>> np.linspace(2,10,num=5)
- array([ 2., 4., 6., 8., 10.])
创建 2 到 10 之间的数, 数组长度为 5, 不能包括 10
- >>> np.linspace(2,10,num=5,endpoint=False)
- array([2. , 3.6, 5.2, 6.8, 8.4])
- zeros
根据数组的长度创建全部都是 0 的浮点数的数组
- >>> np.zeros(5)
- array([0., 0., 0., 0., 0.])
- ones
根据数组的长度创建全部都是 1 的浮点数的数组
- >>> np.ones(5)
- array([1., 1., 1., 1., 1.])
- reshape
将一维数组转换成多维数组
- >>> a4 = np.arange(10)
- >>> a4
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- >>> a4.reshape(2,5)
- array([[0, 1, 2, 3, 4],
- [5, 6, 7, 8, 9]])
- >>> a4.reshape(5,2)
- array([[0, 1],
- [2, 3],
- [4, 5],
- [6, 7],
- [8, 9]])
>>> a4.reshape(3,3) 报错
- ---------------------------------------------------------------------------
- ValueError Traceback (most recent call last)
- <ipython-input-57-88c9cc4a32ac> in <module>
- ----> 1 a4.reshape(3,3)
- ValueError: cannot reshape array of size 10 into shape (3,3)
索引和切片
数组和常量之间的运算
- >>> a4
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- >>> a5 = a4*3
- >>> a5
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
- >>> li = [1, 2, 3, 4]
- >>> li*3
- [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
- >>> a5+3
- array([ 3, 6, 9, 12, 15, 18, 21, 24, 27, 30])
- >>> a5
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
同等大小数组之间的运算
- >>> a7 = np.array([1,2,3,4])
- >>> a8 = a5 = np.array([1,2,3,4])
- >>> a7*a8
- array([ 5, 12, 21, 32])
数组的索引
- >>> a5[2]
- 6
- >>> a6 = a5.reshape(2,5)
- >>> a6
- array([[ 0, 3, 6, 9, 12],
- [15, 18, 21, 24, 27]])
- >>> a6[0,2]
- 6
- >>> a6[0][2]
- 6
数组的切片
- >>> a5
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
- >>> a5[3:6]
- array([ 9, 12, 15])
- >>> a6
- array([[ 0, 3, 6, 9, 12],
- [15, 18, 21, 24, 27]])
- >>> a6[:,2:4]
- array([[ 6, 9],
- [21, 24]])
布尔型索引
- >>> a5
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
获取数组中大于 5 的数
- >>> a5>5
- array([False, False, True, True, True, True, True, True, True,
- True])
取出所有大于 5 的偶数
- >>> a5[(a5>5) & (a5%2==0)]
- >>> array([ 6, 12, 18, 24])
花式索引
- >>> a5
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
获取索引是 2, 4, 8 所对应的具体的值
- >>> a5[[2,4,8]]
- array([ 6, 12, 24])
通用函数
取绝对值
>>> np.abs(-2) 2
开根号
>>> np.sqrt(4) 2.0
向上取值
- >>> np.ceil(3.2)
- 4.0
- np.ceil(3.8)
- 4.0
四舍五入
- >>> np.rint(3.2)
- 3.0
- >>> np.rint(3.7)
- 4.0
小数位归 0
- >>> np.trunc(1.5)
- 1.0
将整数和小数分开
- >>> np.modf(12.22)
- (0.22000000000000064, 12.0)
- >>> np.modf([0,3.5])
- (array([0. , 0.5]), array([0., 3.]))
判断数据是否不是一个数字
- >>> np.isnan(3)
- False
取 2 个数组中的最大值组成一个新的数组
- >>> np.maximum([2,3,4],[1,5,2])
- array([2, 5, 4])
取平均值
- >>> a5
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
- >>> np.mean(a5)
- 13.5
取方差
((0-13.5)^2+(3-13.5^2)+...+(27-13.5)^2)/10 ===> 方差公式
- >>> a5
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
- >>> np.var(a5)
- 74.25
排序
- >>> np.sort(a5)
- array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
随机数生成
生成 0 到 1 之间的随机数
- >>> np.random.rand()
- 0.41127690452609
生成一个三行 2 列的 0 到 1 的随机数的数组
- >>> np.random.rand(3,2)
- array([[0.25495748, 0.4505048 ],
- [0.70361618, 0.37524951],
- [0.19785526, 0.3860836 ]])
生成 0 到 2 以内的 10 个整数的数组
- >>> np.random.randint(2,size=10)
- array([1, 1, 0, 1, 1, 0, 0, 0, 0, 1])
生成 2 到 5 以内的 10 个整数的数组
- >>> np.random.randint(2,5,size=10)
- array([2, 4, 4, 2, 4, 4, 3, 4, 2, 3])
生成 5 以内的 3 个整数组成的数组
- >>> np.random.choice(5,3)
- array([4, 2, 4])
给定形状产生随机数组
- >>> np.random.uniform(-1,0,10)
- array([-1.86027339e-01, -5.65761107e-01, -7.38784743e-01, -9.64964081e-01,
- -3.88713618e-01, -5.17054693e-01, -5.46899721e-01, -9.90719601e-01,
- -7.09073463e-04, -5.16624999e-01])
来源: http://www.bubuko.com/infodetail-3218491.html