NumPy基础:数组和矢量计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NumPy基础:数组和矢量计算相关的知识,希望对你有一定的参考价值。

今天被老板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函数

 

以上是关于NumPy基础:数组和矢量计算的主要内容,如果未能解决你的问题,请参考以下文章

NumPy基础:数组和矢量计算

python数据分析 Numpy基础 数组和矢量计算

python numpy基础 数组和矢量计算

NumPy基础:数组和矢量计算

《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

学习基础知识:数组和矢量计量Numpy