numpy
将jupyter notebook转换为markdown文件之后,效果不是很好看,可以访问以下链接:
https://nbviewer.jupyter.org/github/huxiwen/python3_jupyter_note/blob/master/numpy%E6%95%B0%E6%8D%AE%E5%9F%BA%E7%A1%80.ipynb
import numpy
- 查看numpy的版本
numpy.__version__
'1.13.3'
import numpy as np
np.__version__
'1.13.3'
Python List 的特点
L = [i for i in range(10)]
L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[5]
5
L[5] = 100
L
[0, 1, 2, 3, 4, 100, 6, 7, 8, 9]
python List比较灵活,可以list中可以有多种类型
- 所以需要在识别list的过程中识别每一个元素的数据类型,操作的速度较慢
L[5] = 'Machine Learning'
L
[0, 1, 2, 3, 4, 'Machine Learning', 6, 7, 8, 9]
- 使用array,array中的元素只运行是同一种的元素
import array
arr = array.array('i', [i for i in range(10)])
arr
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[5] = 100
arr
array('i', [0, 1, 2, 3, 4, 100, 6, 7, 8, 9])
- 将array中的一个元素赋值为其它类型的数据类型,将会报错
arr[5] = 'machine learing'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-b1900297fd0e> in <module>()
----> 1 arr[5] = 'machine learing'
TypeError: an integer is required (got type str)
numpy.array
- 以下同array的性质相似
nparr = np.array([i for i in range(10)])
nparr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nparr[5] = 100
nparr
array([ 0, 1, 2, 3, 4, 100, 6, 7, 8, 9])
nparr[5] = 'r'
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-23-0f68c6bffbe5> in <module>()
----> 1 nparr[5] = 'r'
ValueError: invalid literal for int() with base 10: 'r'
nparr.dtype
dtype('int32')
nparr[5] = 3.14
- 进行了隐式的数据转换
nparr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
其它创建numpy.array的方法
- zeros方法生成元素为0的矩阵
- ones方法生成全为1的矩阵
- full方法可以进行填充一个值
np.zeros(10)
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros(10).dtype
dtype('float64')
np.zeros(10, dtype = int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.zeros((3,5), dtype = int)
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
np.ones(10)
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.ones((3,5), dtype =int)
array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
np.full((3,5), 10)
array([[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]])
np.full(shape=(3,5), fill_value=10)
array([[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]])
arange
- 功能类似于range,生成一个范围内的有一定步长的数组
- 但不同于range的是,在该方法中可以使用浮点型的数据作为输入
np.arange(0, 20, 2)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.arange(0, 1, 0.1)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
linspace
np.linspace(0, 20, 10)
# 生成0-20之间的等差数列,10个数,包含0和20
array([ 0. , 2.22222222, 4.44444444, 6.66666667,
8.88888889, 11.11111111, 13.33333333, 15.55555556,
17.77777778, 20. ])
np.linspace(0, 20, 11)
array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20.])
random
np.random.randint(0, 10, size = 10)
array([8, 3, 9, 6, 3, 7, 1, 6, 8, 3])
- 因为用到的随机数都是伪随机数,所以在设定随机数种子之后,两次随机生成的数组是一样的
np.random.seed(1000)
np.random.randint(0, 10, size = 10)
array([3, 7, 7, 0, 1, 0, 9, 8, 9, 4])
np.random.seed(1000)
np.random.randint(0, 10, size = 10)
array([3, 7, 7, 0, 1, 0, 9, 8, 9, 4])
np.random.random()
0.8517471987138742
np.random.random(10)
array([ 0.57432043, 0.77250273, 0.9066506 , 0.06032431, 0.02119571,
0.90500709, 0.81729934, 0.08585602, 0.85544031, 0.24453192])
np.random.random((2,2))
array([[ 0.65856221, 0.47657574],
[ 0.81632509, 0.24071122]])
nomal 生成指定均值,和方差的随机数
np.random.normal(loc=10,scale=100,size=10)
array([ 37.77283981, 47.68117189, 18.13379194, 101.54615495,
99.89578633, -15.43312193, 24.73978704, -54.9984287 ,
70.59846046, 127.26178163])
- 在命令后面加上?可以看到产生文档所需要的参数
np.random.normal?