今天被老板fire了,还是继续抄书吧,安抚我受伤的小心脏。知识还是得慢慢积累,一步一个脚印,这样或许才是最快的捷径。
------2015-2-16------------------------------------------------------------------
- NumPy的ndarray:一种多维数组对象
NumPy一个重要的特点就是N维数组对象(ndarray),该对象是一个快速灵活的大数据集容器。ndarray是一个通用的同构数据多维容器,也就是所有的元素都必须是相同的类型。每个数组都有shape(表示各维度大小的元组)和dtype(表示数组数据类型的对象)。
In[2]: import numpy as np In[3]: data=[[1,2,3],[4,5,6]] In[4]: arr=np.array(data) In[6]: arr Out[6]: array([[1, 2, 3], [4, 5, 6]]) In[7]: arr.shape Out[7]: (2L, 3L) In[8]: arr.dtype Out[8]: dtype('int32')
创建ndarray
函数 | 说明 |
array | 将输入数据(列表、元组、数组或其它序列类型)转换为ndarray。要么推断出dtype,要么显示指定dtype。默认直接复制输入数据 |
asarray | 将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制 |
arange | 返回一个ndarray而不是一个列表 |
ones、ones_like | 根据指定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组 |
zeros、zeros_like | 类似于ones和ones_likes只不过产生全0数组 |
empty、empty_like | 创建新数组,只分配内存空间但不填充任何值 |
eye、identity | 创建一个N×N单位矩阵 |
ndarray数据类型
int8,int16,int32,int64有符号整型
uint8,uint16,uint32,uint64无符号整型
float16,float32,float64,float128单精度,多精度,扩展精度
complex64,complex128,complex256分别用32,64,128表示的复数
bool
object python数据对象
string_ 固定长度的字符串数据类型
unicode_ 固定长度的unicode类型
In[23]: arr.astype(np.float64) Out[23]: array([ 1., 2., 3., 4., 5.]) In[27]: h1=arr.astype(np.int16) In[30]: h1.dtype Out[30]: dtype('int16')
数组和标量之间的运算
In[2]: import numpy as np In[3]: arr=np.array([[1,2,3],[4,5,6]]) In[4]: arr*arr Out[4]: array([[ 1, 4, 9], [16, 25, 36]]) In[5]: arr+arr Out[5]: array([[ 2, 4, 6], [ 8, 10, 12]]) In[6]: arr*4 Out[6]: array([[ 4, 8, 12], [16, 20, 24]]) In[7]: arr**0.5 Out[7]: array([[ 1. , 1.41421356, 1.73205081], [ 2. , 2.23606798, 2.44948974]])
基本的索引和切片
In[8]: np.arange(10) Out[8]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In[9]: arr=np.arange(10) In[10]: arr[5:8] Out[10]: array([5, 6, 7]) In[11]: arr_slice=arr[5:8] In[12]: arr_slice[1] Out[12]: 6 In[13]: arr_slice[1]=123456 In[14]: arr Out[14]: array([ 0, 1, 2, 3, 4, 5, 123456, 7, 8, 9])
警告:ndarray切片的一份副本而非视图,就需要显示arr[5:8].copy()
数组的转置与轴对换
In[16]: arr=np.arange(15).reshape((3,5)) In[17]: arr Out[17]: array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) In[18]: arr.T Out[18]: array([[ 0, 5, 10], [ 1, 6, 11], [ 2, 7, 12], [ 3, 8, 13], [ 4, 9, 14]]) In[19]: np.dot(arr,arr.T) Out[19]: array([[ 30, 80, 130], [ 80, 255, 430],
- 通用函数:快速的元素级数组函数
- 利用数组进行数据处理
- 用于数组的文件输入输出
- 线性代数
- 随机数生成
In[20]: samples=np.random.normal(size=(4,4)) In[21]: samples Out[21]: array([[ 1.2160082 , 0.34629744, -0.70813727, 2.59673398], [-1.32110632, 1.19660352, 0.08227731, 0.24075048], [-0.29301216, 0.42639032, -1.76321448, -1.05558718], [ 0.0872803 , 0.25871173, 0.63373105, 0.59362002]])
numpy.random模块比python内置的random模块速度更加快。
部分numpy.random函数