Numpy(numerical python的简称)是高性能科学计算和数据分析的基础包,python中安装许多其他库(如scipy,matplotlib等都需要numpy已经安装),这儿打算简单介绍一下它的基本使用,初定一个系列(希望能写完)
写在前面:
(1)导入numpy库的约定写法:import numpyasnp
(2)索引下标从0开始,且前闭后开(比如0-3,实际是0,1,2)
(3)下面采用Ipython进行代码示例,即输入为In,输出为Out
1 numpy之ndarray,一种多维数组对象,是一个多维的同构数据容器
1)创建ndarray
A:使用array函数
data=[1,2,3,4,5]
arr1=np.array(data)
In[4]: arr1
Out[4]:
array([1, 2, 3, 4, 5])
In[5]: data2=[[1,2,3,4],[5,6,7,8]]
In[6]: arr2=np.array(data2)
In[7]: data2
Out[7]:
[[1, 2, 3, 4], [5, 6, 7, 8]]
额外的两个函数说明
(1)ndarray.ndim:数组的维数(即数组轴的个数),等于秩
In[8]: arr2.ndim
Out[8]: 2
(2)ndarray.shape:返回大小
In[9]: arr2.shape
Out[9]:
(2, 4)
补充说明,除非显示说明,np.array会尝试为新建的数组推断出一个合适的数据类型,可以用dtype来获取数据类型,再罗嗦一下,也可以这样:
In[19]: arr3=np.array([1,2,3],dtype=np.float64)
In[10]: arr3.dtype
Out[10]:
dtype(' float64')
此外,使用np.ones(),np.zeros(),可以创建全0或全1 的数组
In[14]: a=np.zeros((2,3))
In[15]: a
Out[15]:
array([[ 0., 0., 0.],
[ 0., 0., 0.]])
In[16]: np.ones((2,3))
Out[16]:
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
arange是python内置函数range的数组版
In[18]: np.arange(10)
Out[18]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
下表为一些常见函数说明:
可以通过astype方法显式地转换dtype(下面的代码是用python自带的IDLE编辑,pycharm出了点问题)
>>> arr=np.array([1,2,3])
>>> arr
array([1, 2, 3])
>>> arr.astype(float64)
>>> arr.astype(float)
array([ 1., 2., 3.])
二、数组和标量之间地运算
>>>arr=np.array([[1,2,3],[2,3,4]])
>>> arr*arr
array([[ 1, 4, 9],
[ 4, 9, 16]])
>>> arr*2
array([[2, 4, 6],
[4, 6, 8]])
>>> 1/arr
array([[ 1. , 0.5 , 0.33333333],
[ 0.5 , 0.33333333, 0.25 ]])
三、基本的索引与切片
>>> arr=np.array([1,2,3,4])
>>> arr[2]
3
>>> arr[1:3]
array([2, 3])
>>> arr[-1]
4
>>> arr[1:3]=12
>>> arr
array([ 1, 12, 12, 4])
#如上,numpy具有广播机制,数组切片是原始数据地视图,意味着不会复制,视图上地任何修改都会反映到源数据上。因为python是用来处理大数据,复制会影响内存和性能,如果需要复制,那么使用copy()函数
二维数组地索引有以下两种:
>>>arr=np.array([[1,2,3],[2,3,4]])
>>> arr[1,1]
3
>>> arr[1][1]
3
下图说明了二维数组地索引方式:
三维以上以此类推(索引都是从0开始的),此外还有bool数组和索引,此处不再详述。另外再讲一点,numpy中的花式索引
>>> arr=np.empty((8,4)) #empty生成空数组
>>> for i in range(8):
arr[i]=i
>>> arr
array([[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 2., 2., 2., 2.],
[ 3., 3., 3., 3.],
[ 4., 4., 4., 4.],
[ 5., 5., 5., 5.],
[ 6., 6., 6., 6.],
[ 7., 7., 7., 7.]])
>>> arr[[1,3,0,4]] #输出了第1、3、0、4行
array([[ 1., 1., 1., 1.],
[ 3., 3., 3., 3.],
[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.]])