numpy常见用法
numpy
import numpy as np
shop_price = [30, 20, 15, 40]
shop_num = [2, 3, 1, 4]
快捷键
向下添加一个单元格, 按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])