Numpy 基础操作¶
以numpy的基本数据例子来学习numpy基本数据处理方法
主要内容有:
- 创建数组
- 数组维度转换
- 数据选区和切片
- 数组数据计算
- 随机数
- 数据合并
- 数据统计计算
In [1]:
import numpy as np
创建一维数组¶
In [2]:
data = np.arange(15)
data
Out[2]:
reshape进行维度转换¶
- data.reshape(rows, cols), 转换的行数,列数。
- -1表示使用默认计算,reshape(3, -1),表示三行,列数根据数据自动计算
- reshape(-1, 5)表示5列,行数根据计算得出
In [3]:
data = data.reshape(3,5)
data
Out[3]:
np.newaxis增加维度¶
为数据增加维度,下面例子展示增加了一个维度
数据变为三行,一列,垂直五的数据
In [4]:
d = data[:, np.newaxis]
d
Out[4]:
In [5]:
d.shape
Out[5]:
In [6]:
data.shape
Out[6]:
读取逗号分割数据¶
In [7]:
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_2d = np.genfromtxt(url, delimiter=',', dtype='object')
iris_2d[:10]
Out[7]:
数据切片和类型转换¶
使用[m, n]来对数据取值或者切片
- [:, n] 取列数据
- [m, :] 取行数据
- [m:n, m:n] 数据切片
astype来指定数据类型
In [8]:
names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')
sepallength = iris_2d[:, 0].astype('float')
petallength = iris_2d[:, 2].astype('float')
sepallength
Out[8]:
In [9]:
petallength
Out[9]:
数据运算¶
numpy数据运算语法与python基本一致,但是是数据中的每个数据进行运算
- arr数据与单个数据运算,arr中每个数据与单数进行计算,返回新的arr
- arr之间运算,arr对用位置的数据一一计算,返回新的arr
In [10]:
volume = (np.pi * petallength * (sepallength**2))/3
volume
Out[10]:
数据维度转换¶
volume原来是一维的,增加维度后,变为二维
In [11]:
volume = volume[:, np.newaxis]
volume
Out[11]:
计算示例¶
In [12]:
data
Out[12]:
In [13]:
# 取第四列数据,每个数据+10
d = data[:,4] +10
d
Out[13]:
In [14]:
d = d[:, np.newaxis]
d
Out[14]:
数据纵向堆叠¶
- np.hstack([data1, data2]), 把data2在列的方向上添加到data1上
- np.vstack([data1, data2]), data2在行的方向上添加到data1上
In [15]:
np.hstack([data,d])
Out[15]:
查找数据¶
np.partition快速查找第n大的值
In [16]:
l=[3,4,5,2,1]
np.partition(l,kth=-4)
Out[16]:
随机数¶
In [17]:
b = np.random.rand(10)
b
Out[17]:
In [18]:
b = np.random.uniform(0,10,5)
b
Out[18]:
In [19]:
np.random.randn(5)
Out[19]:
In [20]:
np.random.randint(0,10,5)
Out[20]:
In [21]:
np.random.randint(0,10,5)
Out[21]:
In [22]:
np.random.seed(5)
np.random.randint(0,10,5)
Out[22]:
In [23]:
np.random.seed(6)
np.random.randint(0,10,5)
Out[23]:
In [24]:
np.random.uniform(10,100,10)
Out[24]:
In [25]:
np.random.standard_normal(10)
Out[25]:
In [26]:
np.linspace(1,20, 10)
Out[26]:
In [27]:
np.arange(0,5)
Out[27]:
In [28]:
a = np.arange(10).reshape(10)
a
Out[28]:
In [29]:
a+a
Out[29]:
In [30]:
a-a
Out[30]:
In [31]:
a*a
Out[31]:
In [32]:
a/a
Out[32]:
In [33]:
a.dot(a)
Out[33]:
In [34]:
a
Out[34]:
In [35]:
b = np.arange(12).reshape(3,4)
b
Out[35]:
In [36]:
b[0]
Out[36]:
In [37]:
b[:,0]
Out[37]:
In [38]:
b[0,:]
Out[38]:
In [39]:
b[-1]
Out[39]:
In [40]:
b.size
Out[40]:
In [41]:
b.shape
Out[41]:
数据拉平¶
将多维数据将为一维
- ravel 方法是返回的视图,修改数据会影响原数据
- flat 方法是返回原数据的copy,不会影响原数据
In [42]:
b.ravel()
Out[42]:
In [43]:
[x for x in b.flat]
Out[43]:
In [44]:
b.flat[3]
Out[44]:
数据resize和reshape¶
- reshape:有返回值,所谓有返回值,即不对原始多维数组进行修改;
- resize:无返回值,所谓有返回值,即会对原始多维数组进行修改;
In [45]:
b.reshape(3,4)
Out[45]:
In [46]:
c = b.resize(3,4)
c
In [47]:
b
Out[47]:
arr平均值¶
np.mean(d, axis=0),计算平均值,axis来指定按那个轴运算
In [48]:
np.mean(b, axis=0)
Out[48]:
In [49]:
a = np.array([1,0.2,3])
In [50]:
a
Out[50]:
In [51]:
a.dtype
Out[51]:
In [52]:
np.arange(10)
Out[52]:
特殊矩阵¶
In [53]:
np.ones((5,5))
Out[53]:
In [54]:
b
Out[54]:
In [55]:
np.ones_like(b)
Out[55]:
In [56]:
np.identity(4)
Out[56]:
In [57]:
np.eye(4)
Out[57]:
取数据示例¶
In [58]:
a
Out[58]:
In [59]:
b
Out[59]:
In [60]:
b[:,2]
Out[60]:
In [61]:
# 布尔值取数据
b[b>3]
Out[61]:
In [62]:
b
Out[62]:
In [63]:
b[b==3]
Out[63]:
In [64]:
b
Out[64]:
In [65]:
c = b[b!=3]
In [66]:
c
Out[66]:
花式索引¶
取特定的行,并按照指定顺序排序
In [67]:
b
Out[67]:
In [68]:
b[[2,0,1]]
Out[68]:
In [69]:
b = np.arange(32).reshape(8,4)
b
Out[69]:
In [70]:
b[[1,5,7,2],[0,3,1,2]]
Out[70]:
In [71]:
b[[1,5,7,2]][:,[0,3,1,2]]
Out[71]:
In [72]:
b
Out[72]:
矩阵转置,轴向交换¶
In [73]:
b.swapaxes(0,1)
Out[73]:
In [74]:
b.swapaxes(1,0)
Out[74]:
In [75]:
b
Out[75]:
矩阵运算示例¶
In [76]:
np.add(b,b)
Out[76]:
In [77]:
np.sort(b[[2,0,1]])
Out[77]:
In [78]:
b[[2,0,1]]
Out[78]:
In [79]:
np.linalg.eig(b[0:4])
Out[79]:
In [80]:
np.linalg.det
Out[80]:
In [81]:
b
Out[81]:
In [82]:
b[0:4]
Out[82]:
In [83]:
np.random.randn(10)
Out[83]:
In [84]:
np.random.uniform(0,1,10)
Out[84]:
In [85]:
np.random.random(5)
Out[85]:
In [86]:
w = 5000
n = 1000
draws = np.random.randint(0,2,size=(w,n))
draws
Out[86]:
In [87]:
steps = np.where(draws > 0, 1, -1)
steps
Out[87]:
In [88]:
# 累计求和
walks = steps.cumsum(1)
walks
Out[88]: