numpy & pandas
任何关于数据分析的模块都少不了它们两个
运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, 是 numpy 的升级版本
消耗资源少:采用的是矩阵运算,会比 python 自带的字典或者列表快好多
(看文字,不看视频,会更好)
numpy的属性
ndim 维度 对于array = np.array([[1,2,3],[4,5,6]])
array.ndim
2
shape 行数和列数 array.shape
(2, 3)
size 元素个数 array.size
6
关于维度ndim的问题
np.array([[1,2,3],[4,5,6]]) 2维
np.array([[1,2,3],[4,5,6],[7,8,9]]) 2维
np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,0],[1,2]]]) 3维
和python列表的区别 采用的是矩阵运算
通常要先把python的列表转化为np的矩阵
不过还是用列表框起来的矩阵
使用numpy来创建array
关键字:
array 创建数组 a=np.array([2,23,4])
这个函数中传入的参数是列表
a
array([ 1, 23, 4])
print(a)
[ 1 23 4]
可见:直接输a会显示一些额外属性,print才是正常要显示的。
尽量多用print
dtype 指定数组类型 a=np.array([1,23,4],dtype=np.int)
print(a.dtype)
int64
a=np.array([1,23,4],dtype=np.int32)
print(a.dtype)
int32
a=np.array([1,23,4],dtype=np.float)
print(a.dtype)
float64
a=np.array([1,23,4],dtype=np.float32)
print(a.dtype)
float32
a=np.array([1,23,4],dtype=np.float16)
print(a.dtype)
float16
a=np.array([1,23,4],dtype=np.float15)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'float15'
可见:默认是64位的
如果要指定的话需要制定2的幂次方的数字
zeros 创建数据全为0 >>> a=np.zeros((3,4))
print(a)
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
可见:np.关键字 后面传入的参数要么是[]列表形式,要么是()元组形式
ones 创建数据全为1 >>> a=np.ones((3,4),dtype=np.int)
print(a)
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
empty 创建数据接近0 >>> a=np.empty((3,4))
print(a)
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
np.empty((3,4))
array([[ 4.94065646e-324, 4.94065646e-324, 4.94065646e-324,
4.94065646e-324],
[ 4.94065646e-324, 4.94065646e-324, 4.94065646e-324,
4.94065646e-324],
[ 4.94065646e-324, 4.94065646e-324, 4.94065646e-324,
4.94065646e-324]])
print时近似为0了
直接查看会有更多信息
arange 按指定范围创建数据 >>> a=np.arange(10,20,2)
print(a)
[10 12 14 16 18]
10-19 的数据,2步长
a=np.arange(12)
print(a)
[ 0 1 2 3 4 5 6 7 8 9 10 11]
其他相关的:可以用reshape改变形状
同时,shape本身是用来查看形状的
a=np.arange(12).reshape(3,4)
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
一般,表示范围的,最后一个都不包含在内
比如np.arange(10,20,2)
np.arange(12)
另外:注意np.arange(12)默认起点为0,默认步长为1
linspaces 创建线段(?)
a=np.linspace(1,10,20)
print(a)
[ 1. 1.47368421 1.94736842 2.42105263 2.89473684
3.36842105 3.84210526 4.31578947 4.78947368 5.26315789
5.73684211 6.21052632 6.68421053 7.15789474 7.63157895
8.10526316 8.57894737 9.05263158 9.52631579 10. ]
a=np.linspace(1,10,2)
print(a)
[ 1. 10.]
a=np.linspace(1,10,3)
print(a)
[ 1. 5.5 10. ]
由最后两个例子可见:最后一个参数是端点数,不是分的份数
线段和arange指定步长是有一些相似的,但更多的是差别
差别在:一个是步长,一个是划分n-1份
通常要在生成数组的时候把形状也指定了,zeros、ones、array 自带形状了
a=np.linspace(1,10,15).reshape(3,5)
print(a)
[[ 1. 1.64285714 2.28571429 2.92857143 3.57142857]
[ 4.21428571 4.85714286 5.5 6.14285714 6.78571429]
[ 7.42857143 8.07142857 8.71428571 9.35714286 10. ]]
P.s. np.empty 分配指定的数组空间后不初始化,所以,np.empty 后打印出来的东西每次不一定是一样的,而并不是接近于 0 的数字,这个方法最大的好处就是速度快,因为少了初始化空间的操作
array()里的参数之所以用[]表示,是因为只能传入一个参数,就像我在推荐系统里,返回多个参数时采取的方法一样。
numpy 的几种基本运算
备忘录转过来,格式大爆炸,哈哈哈🤣🤣🤣