一、numpy
关键词:开源 数据计算扩展
主要是用于处理 Python在数据、数值处理中速度比较慢的问题。
功能:ndarray 多维操作 线性代数
官网:http://www.numpy.org/
下载了Anaconda之后,很多我们常用的库已经是安装好的。
打开Anaconda Prompt,输入conda list,就会发现已经拥有了很多库啦。
除此之外,若import numpy报错,可参考一下知乎大神们的回答:
https://www.zhihu.com/question/28132194
在Python中,有一个数据类型 list,在list中,我们可以存放多种不同类型的数据,但当我们数据量越来越大的时候,由于Python每次都需要去判断一下数据的类型,运算速度就会很慢了。
numpy的ndarray中,每个只可以拥有一种数据类型
#-*- coding:utf-8 -*-
import numpy as np
def main():
lst = [[1,3,5],[2,4,6]]
print(type(lst))
np_lst = np.array(lst)
print(type(np_lst))
if __name__ == "__main__":
main()
输出结果:
<class 'list'>
<class 'numpy.ndarray'>
简单列举ndarray中的数据类型:
bool,int,int8,int16,int32,int64,int128,unit8,unit16,unit32,unit64,unit128,float16,float32,float64,complex64/128,str
上边的u,就代表unsigned
ndarray是numpy最基础的数据结构,这个数据结构的属性:
lst = [[1,3,5],[2,4,6]]
np_lst = np.array(lst,dtype=np.float)
print(np_lst.shape) #该数组的形状
打印结果:(2, 3)
print(np_lst.ndim) #该数组的维度
打印结果:2
print(np_lst.dtype)
打印结果:float64
print(np_lst.itemsize)
打印结果:8(64位占8个字节)
print(np_lst.size)
打印结果:6(一共6个元素)
常见数组
print(np.zeros([2,4]))
print(np.ones([3,5]))
打印结果:
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
print(np.random.rand(2,4))
打印结果:2行4列的随机数(0~1之间的随机数)
[[ 0.51822084 0.1033368 0.10229034 0.47420062]
[ 0.06186117 0.65672721 0.72348707 0.76551658]]
print(np.random.rand())
打印结果:0.92446879327 一个随机数
print(np.random.randint(1,10))
#打印一个1~10的整数
print(np.random.randint(1,10.3))
#打印三个1~10之间的整数 [8,3,7]
print(np.random.randn())
#打印一个标准的正太分布随机数
print(np.random.randn(2,3))
#生成2行3列的正太分布随机数
print(np.random.chioce([10,20,30]))
#生成的随机数,只能在10 20 30 中间进行选择
print(np.random.beta(1,10,100))
#生成100个从1~10的随机数
……………………还有许多
numpy常见操作
print(np.arange(1,11))
[ 1 2 3 4 5 6 7 8 9 10]
print(np.arange(1,11).reshape([2,5]))
等价于
print(np.arange(1,11).reshape([2,-1]))
会得到一个2行3列的ndarray
lst = np.arange(1,11).reshap([2,-1])
print(np.exp(lst)) #自然指数
print(np.exp2(lst)) #自然指数的平方
print(np.sqrt(lst)) #开方
print(np.sin(lst)) #正弦
print(np.log(lst)) #对数
lst = np.array([[[1,2,3,4],
[4,5,6,7]],
[[7,8,9,10],
[10,11,12,13]]])
print(lst.sum()) #112
print(lst.sum(axis=2)) #这个axis最大是维度减一,这个是用来判断,我们执行操作的维度。
举个例子,上面,如果axis是0的话,就是最外层的数组进行相加,即[[1,2,3,4],[4,5,6,7]]与[[7,8,9,10],[10,11,12,13]]进行相加,得到的结果是:
[[ 8 10 12 14]
[14 16 18 20]]
如果axis是1的话,就再深入一层进行相加,即[1,2,3,4],[4,5,6,7],[7,8,9,10],[10,11,12,13]进行相加,得到的结果是
[[ 5 7 9 11]
[17 19 21 23]]
如果axis是2的话,就是每个[]内的元素进行相加,得到的结果是[[10 22] [34 46]]
除了sum还可以有max,min等
lst1 = np.array([1,2,3,4])
lst2 = np.array([5,10,15,20])
print(np.dot(lst1.reshape([2,2]),lst2.reshape([2,2]))) 点乘
1*5+2*15 1*10+2*20
3*5+4*15 3*10+4*20
还可以进行两个ndarray的加减乘除等等运算
在python中,两个list相加表示追加,在numpy中,也可以实现追加,要使用函数concatenate
print(np.concatenate((lst1,lst2),axis=0))
可以实现两个ndarray的追加
[ 1 2 3 4 5 10 15 20]
两个list实现上下追加,使用vstack
print(np.vstack(lst1,lst2))
[[ 1 2 3 4]
[ 5 10 15 20]]
hstack实现的效果和concatenate一样
[ 1 2 3 4 5 10 15 20]
print(np.split(lst1,2)) 把lst1分成2份
[array([1, 2]), array([3, 4])]
print(np.copy(lst1)) #拷贝