本篇内容介绍了“Python中Numpy库的详细讲解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
首先得了解下什么是Numpy,从我的印象中,一般提到这个工具都会和机器学习关联起来了。当然和实际的理解又很多的差距。
简单来说,Python本身不是设计为科学计算的语言,但是Python随着使用的普及和大量的扩展,这方面的需求会越来越大,于是有了Numpy来作为补充。
下载Numpy可以使用pip,一个命令即可搞定pip install numpy,大概10多M
Numpy相比TensorFlow的环境搭建要容易多了,校验的方式也很简单,import即可。
>>> import numpy
如果要查看版本可以使用如下的方式。
>>> numpy.version.full_version
'1.13.3'
>>>
当然我们可以指定别名,使用起来更简便一些,我们后续的测试都是这么玩。
>>> import numpy as np
>>> np.version.full_version
'1.13.3'
我们先来热热身。
得到一个范围10以内的整数串,确切的说是数组。
>>> a = np.arange(10)
>>> print a
[0 1 2 3 4 5 6 7 8 9]
打印出来看是数组了
>>> type(a)
<type 'numpy.ndarray'>
然后我们变个花样,把这个数组改造成一个2部分,每一部分是5个。
>>> a = a.reshape(2,5)
>>> print a
[[0 1 2 3 4]
[5 6 7 8 9]]
可以继续重构,重构成20个元素,然后分成4部分,每个部分就是5个元素
>>> a = np.arange(20)
>>> a = a.reshape(4,5)
>>> print a
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
还可以构造高维的数组,比如下面这样。
>>> a = a.reshape(2,2,5)
>>> print a
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]]
[[10 11 12 13 14]
[15 16 17 18 19]]]
>>>
如果输入(2,2,6)就不可以了,明显的2*2*6=24,已经溢出了。
>>> a = a.reshape(2,2,6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: cannot reshape array of size 20 into shape (2,2,6)
>>>
我们得到数组的维度
>>> a.ndim
3
得到数组各维度的大小
>>> a.shape
(2L, 2L, 5L)
查看数组的元素个数
>>> a.size
20
然后我们创建数组,可以转换列表来得到,
>>> raw = [0,1,2,3,4]
>>> a = np.array(raw)
>>> a
array([0, 1, 2, 3, 4])
>>> print a
[0 1 2 3 4]
换个略微复杂的,也是一样的操作。
>>> raw = [[0,1,2,3,4],[5,6,7,8,9]]
>>> b = np.array(raw)
>>> b
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>>
如果要得到显示为0的数组,可以使用这种方式zeros
>>> d = (4,5)
>>> np.zeros(d)
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
当然效果不理想都显示了小数点,可以格式化,改成整型
>>> np.ones(d,dtype=int)
array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
得到随机数,一口气生成5个。
>>> np.random.rand(5)
array([ 0.61643689, 0.15915655, 0.20558268, 0.75157157, 0.50395262])
按照这个思路,随机生成100个也是秒级。
再来看看数组运算
这个部分就逐渐显示出优势了,可以支持计算。
>>> a = np.array([[1,2],[2,5]])
>>> print a
[[1 2]
[2 5]]
>>> b = np.array([[2,3],[5,8]])
>>> print a+b
[[ 3 5]
[ 7 13]]
得到一些最大值,最小值。
>>> a = np.arange(20).reshape(4,5)
>>> print a
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
>>> print str(a.sum())
190
>>> print str(a.max())
19
>>> print str(a.min())
0
>>> print str(a.max(axis=1))
[ 4 9 14 19]
>>>
可以很容易的变换。
>>> b = np.arange(2,45,3).reshape(5,3)
>>> b = np.mat(b)
>>> print b
[[ 2 5 8]
[11 14 17]
[20 23 26]
[29 32 35]
[38 41 44]]
如果最大的数是2,从0开始,取5个数是这样的写法
>>> np.linspace(0,2,5)
array([ 0. , 0.5, 1. , 1.5, 2. ])
如果是9个数,则是如下的方式。
>>> np.linspace(0,2,9)
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>>
>>> a = np.array([[3,2],[5,9]])
>>> print a[0][1]
2
>>> print a[1][0]
5
>>> print a[1,0]
5
>>> b = a
>>> a[0][1]=100
>>> print a
[[ 3 100]
[ 5 9]]
>>> print b
[[ 3 100]
[ 5 9]]
上面的结果看起来有些奇怪,其实问题的原因是:Python不是真正将a复制一份给b,而是将b指到了a对应数据的内存地址上。
可以使用copy来规避。
>>> a = np.array([[3,2],[5,9]])
>>> b = a.copy()
>>> a[0][1] = 100
>>> print a
[[ 3 100]
[ 5 9]]
>>> print b
[[3 2]
[5 9]]
指定列
>>> a = np.arange(20).reshape(4,5)
>>> print a
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
>>> print a[:,[1,3]]
[[ 1 3]
[ 6 8]
[11 13]
[16 18]]
按列拼接两个向量成一个矩阵:
>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> print np.column_stack((a,b))
[[1 2]
[2 3]
[3 4]]
“Python中Numpy库的详细讲解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!