前言
最近在学习入门python可视化,先后初步探索了seaborn、matplotlib、plotly和ggplot
发现还是pandas的绘图最容易上手,样式也很商务化,学完官方文档之后和大家一起分享
言归正传,今天继续连载numpy入门系列
基本操作
当使用不同类型的数组时,结果得到的数组的类型对应于更一般或精确的数组(称为upcasting的行为)。
import numpy as np
from numpy import pi
注:从numpy中导入pi(π)
a = np.ones(3, dtype=np.int32)
a
注:创建一个一行三列的矩阵(元素都是1)
注:在0-π之间均匀产生三个等间隔的数字,b的类型是浮点型
c = a+b
c
注:得到的c的类型为浮点型
d = np.exp(c*1j)
d
d.dtype.name
注:得到的是复数
许多一元操作,例如计算数组中所有元素的总和,都被实现为ndarray类的方法
a = np.random.random((2,3))
a
注:产生2行3列的随机数组(元素值为0-1之间的随机数)
a.sum()
注:将a数组所有元素求和
a.min()
注:返回a数组中最小的元素值
a.max()
注:返回a数组中的最大值
注意:我们看到的数组和单独取出的最大值保留的小数位数不同
默认情况下,这些操作适用于数组,就像它是数字列表一样,不管其形状如何。 但是,通过指定轴参数,您可以沿着数组的指定轴应用一个操作:
b = np.arange(12).reshape(3,4)
b
注:通过reshape将产生的1行的数组转变为3行4列
b.sum(axis=0)
注:将每一列求和,因为指定了参数axis = 0
b.sum(axis=1)
注:按行求和
b.sum()
注:不加axis参数则是所有元素求和
b.min(axis=1)
注:求每行的最小值
b.cumsum(axis=1)
注:要学会自己查帮助文件
?b.cumsum(axis=1)
是返回沿给定轴的元素的累加和
这是什么意思呢?画个图很好理解:
就是把前面所有的加上自己当前的值得到的结果放在当前位置,就是数列前n项累加和的意思
注意这里是按行累加
通用功能
NumPy提供熟悉的数学函数,如sin,cos和exp。 在NumPy中,这些被称为“通用函数”(ufunc)。 在NumPy中,这些函数在数组上以元素方式运算,产生一个数组作为输出。
B = np.arange(3)
B
注:创建一个数组
np.exp(B)
注:对每个元素求e的某次方
np.sqrt(B)
注:对每个元素开方
C = np.array([2., -1., 4.])
np.add(B, C)
注:将两个数组相加(要求数组形状相同)
如果形状不同,则会报错如下:
下图部分:
索引,切片和迭代
一维数组可以被索引,切片和迭代,非常像列表和其他Python序列。
a = np.arange(10)**3
a
注:对数组中每个元素求3次方
a[2]
注:取出序列为2的元素
a[2:5]
注:切片操作
a[:6:2] = -1000
a
注: 和 a[0:6:2] = -1000相同; 从最初到序列号6(6取不到),步长为2,将-1000赋值相应的元素。
a[ : :-1]
注:数组元素逆序排列
for i in a:
print(i**(1/3.))
注:对a数组中每个元素,求1/3次方
结果是nan的我有些不解,-10的3次方不是-1000么
于是我试了试:
希望有了解的大神留言评论指导一下,这个nan暂时跳过吧
多维数组每条轴可以有一个索引。 这些索引以逗号分隔的元组给出:
def f(x,y):
return 10*x+y
注:定义一个函数,参数有两个:x,y
b = np.fromfunction(f,(5,4),dtype=int)
b
注:我们看一下帮助:
?np.fromfunction
指的是,建立5行4列的数组,然后对每个位置元素(i,j)索引代表位置,例如(2,3)位置时,
计算函数值10*2+3=13,所以返回13,其他同理。
b[2,3]
注:我们可以取出数组中的元素值,注意行和列索引是用逗号分隔,而不是冒号(冒号是切片)
b[0:5, 1]
注:按照下标索引切片
b[ : ,1]
注:按照下标索引切片
b[1:3, : ]
注:按照下标索引切片
b[-1]
注:这个相当于b[-1,:]
一些省略记法:
例如五维的数组:x[1,2,...]与 x[1,2,:,:,:]等价
x[...,3] 与 x[:,:,:,:,3] 等价
x[4,...,5,:] 与 x[4,:,:,5,:]等价
c = np.array( [[[ 0, 1, 2],
[ 10, 12, 13]],
[[100,101,102],
[110,112,113]]])
c.shape
注:这是一个三维数组,并显示行、列、高的信息
注:等同于c[1,:,:] 或c[1],有点像切蛋糕的感觉,切出一片二维的。
c[...,2]
注:等同于c[:,:,2]、
相对于第一轴完成多维数组迭代:
for row in b:
print(row)
注:有点像三位数组降维成多个一维的感觉
但是,如果要对数组中的每个元素执行操作,可以使用flat属性,该属性是数组的所有元素的迭代器:
for element in b.flat:
print(element)
注:这是取出多维数组中所有元素的一个不错方法
下图部分:
对形状操作
改变数组的形状
a = np.floor(10*np.random.random((3,4)))
a
注:通过?np.floor()
我们只到,该方法是向下取整的意思
例如:
num = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
np.floor(num)
向下取整就是指一个数字往减小的方向取到最近的值,例如上面例子的-1.7变成-2.0
所以这是产生随机整数的方法,但这里的数字是float不是int类型
可以通过各种命令改变阵列的形状。 请注意,以下三个命令都返回一个修改的新数组,不更改原始数组:
a.ravel()
注:将数组改成一维
a.reshape(6,2)
注:将数组转化为指定形状
a.T
注:数组转置,和矩阵转置一样理解
a.T.shape
矩阵转置之后的形状
a.shape
注:原来矩阵的形状
至此,numpy入门完成了一半,还有两篇完结,之后咱写可视化吧,哈哈~