numpy
我个人的理解是,在处理一些大量数据,多维数据的时候使用。
- 比如我们创建一个数组,很好写
l = [1,2,3,4,5]
- 创建一个二维数组,也很好写
l = [[1,2,3],[4,5,6]]
所以有的同学就说了:我用传统的写法一样可以实现,为什么还要浪费精力去学习numpy呢?
那么我问个问题,说一个二维数组,给每个元素都自加1 怎么写?
聪明的同学一定秒写算法:
l = [[1,2,3],[4,5,6]] new = [ [j+1 for j in i] for i in l ] print(new)
结果如下:
[[2, 3, 4], [5, 6, 7]]
虽然看起来简单,但是仍然比较绕,我运用了内嵌列表推导式的写法。
但是numpy却可以很人性化的简单实现出来:
import numpy l = [[1,2,3],[4,5,6]] l = numpy.array(l) l +=1 print(l)
看到了吧,给这个二维数组自加1就可以让所有元素加1,很神奇吧?结果如下:
可以看到,它还贴心的给换行展示,这个二维数组。或者说此时的l已经不算一个二维数组了,而是一个专门的数据存放格式,一个更好控制和使用的格式:
<class 'numpy.ndarray'>
可以看出是Numpy的专用格式之一。
那么numpy还有什么功能呢?大家有了兴趣之后就可以来死记硬背了,起码先混个脸熟吧~
numpy:import numpy as np
创建指定大小的二维数组,值随机
a = np.empty([3,4],dtype=int)
创建指定大小的二维数组,值全为1,且指定类型
a = np.ones([3,4],dtype=int)
创建n维数组对象
a = np.array([[1,2,3],[4,5,6]])
从已有元组或数组中创建
a = np.asarray([(1,2,3),(4,5,6)])
从数值范围创建列表数组
a = np.arange(start=1,stop=5,step=2)
创建随机元素数组,行/列
a = np.random.random([2,3])
等差数组
a = np.linspace(start=0,stop=20,num=5)
等幂数组 base的1-10次方范围,4个数实现
a = np.logspace(start=1,stop=10,num=4,endpoint=True,base=2)
打印结构
print a.shape
输出元素数据类型
print a.dtype
输出元素秩
print a.ndim
输出元素总个数
print a.size
元素类型转换
a.astype(float)
只要前2行
print a[0:2]
只要第3列
print a[:,2]
只要第2行第3个元素
print a[1,2]
元素全部自加1
a+=1
元素全部判断是否等于5
print a==5
按列求和
print a.sum(axis=0)
按行求和
print a.sum(axis=1)
俩个矩阵同位置元素相乘
print a*b
矩阵扩展,行扩大2倍,列扩大3倍
print np.tile(a,(2,3))
获取每列最大值的行数
print a.argmax(axis=0)
获取每行最大值的列数
print a.argmax(axis=1)
输出每列最大值
print a[a.argmax(axis=0),range(a.shape[1])]
输出每行最大值
print a[range(a.shape[0]),a.argmax(axis=1)]
每行都从小到大排序
np.sort(a,axis=1)
每列都从小到大排序
np.sort(a,axis=0)
存储和取出
np.save('ttt',a) b = np.load('ttt.npy')
存储取出其他格式
np.savetxt('ttt.txt',a) b = np.loadtxt('ttt.txt')