numpy手册(1)-ndarray

浏览: 1628

前面我们算是简单入门了Pandas,numpy也是数据分析中常用的,这里我们也来简单学习下。

1.numpy基本介绍

    numpy是Python的一种开源数值计算扩展,这种工具可以用来存储和处理大型矩阵。一个用Python实现的科学计算包。(--百度百科)

numpy有2种基本对象,

ndarray(N-dimensional array object)和 ufunc(universal function object)

ndarray是存储单一数据类型的多维数组,ufunc是能够对数组进行处理的函数。

2.ndarray

我们先来看看这个数组

首先,我们得引入numpy

import numpy as np

2.1 创建

数组初始化的话有很多方式:Array creation routines

我们可以直接使用list来初始化,array有很多的属性,比如大小,维度,元素个数

import numpy as np

a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([[1,2,3],[4,5,6],[7,8,9]])

print(a,type(a),',shape:',a.shape,',ndim:',a.ndim,',size:',a.size)
print(b,type(b),',shape:',b.shape,',ndim:',b.ndim,',size:',b.size)
print(c,type(c),',shape:',c.shape,',ndim:',c.ndim,',size:',c.size)

image.png

这里呢,我们定义了一维数组和二维数组,比如c,是3行3列的2维数组,元素个数是9个

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

这里,我们再说下这个shape,这个属性可以修改

#原来是4行3列
c = np.array([[1,2,3],[4,5,6],[7,8,9],[0,0,7]])
print(c)
#我们改为3行4列
c.shape=(3,4)
print(c)
#改为2行6列
c.shape=(2,6)
print(c)

image.png

这里需要注意下,如果某个轴的元素为-1,将根据数组元素的个数,自动计算长度

c.shape=(1,-1)
print(c)
c.shape=(-1,1)
print(c)

image.png

这里的shape是改变原来的数组,另一个method,可以创建一个改变shape的新数组,而原数组保持不变

c = np.array([[1,2,3],[4,5,6],[7,8,9],[0,0,7]])
print('c:',c)
d = c.reshape(2,6)
print('c:',c)
print('d:',d)

image.png

这里要注意的是,c和d共享内存数据存储内存区域,c变了,d也会变

print(c[0])
#修改c[0]
c[0]=[-9,-8,-3]
print('c:',c)
print('d:',d)

image.png

我们可以通过dtype来获取元素的类型,我们可以在初始化的时候,指定dtype

c = np.array([1,2,3])
print(c.dtype) #int32

d = np.array([1.1,3.3])
print(d.dtype) #float64

下面,我们来看看常用的初始化方法

arange

通过指定开始值,结束值和步长来创建一维数组,这里不包过终值

arange([start,] stop[, step,], dtype=None)

np.arange(3)
Out[51]: array([0, 1, 2])

np.arange(1,10,3)
Out[52]: array([1, 4, 7])

linspace

通过指定开始值,终值和元素个数,来创建数组,这里包括终值

np.linspace(1,10,5)
Out[53]: array([ 1. , 3.25, 5.5 , 7.75, 10. ])

np.linspace(1,2,3)
Out[54]: array([ 1. , 1.5, 2. ])

np.zeros,np.ones

这2个函数可以初始化指定长度或形状的全0或全1的数组

np.ones(3)
Out[202]: array([ 1., 1., 1.])

np.ones([2,2])
Out[203]:
array([[ 1., 1.],
[ 1., 1.]])

np.zeros(5)
Out[204]: array([ 0., 0., 0., 0., 0.])

np.zeros([4,3])
Out[205]:
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])

np.empty

可以创建一个没有任何具体值得数组

np.empty(2)
Out[211]: array([ 7.74860419e-304, 7.74860419e-304])

np.empty(2,dtype=int)
Out[214]: array([ -1, 2147483647])

np.empty((3,3),dtype=np.float64)
Out[215]:
array([[ 4.94065646e-324, 9.88131292e-324, 1.48219694e-323],
[ 1.97626258e-323, 2.47032823e-323, 2.96439388e-323],
[ 3.45845952e-323, 3.95252517e-323, 4.44659081e-323]])


这要注意下,empty初始化的都是没有意思的值,不一定会初始化为0

image.png

2.2 存取元素

这里直接粘贴一个例子,原始教程在这:http://old.sebug.net/paper/books/scipydoc/numpy_intro.html

>>> a = np.arange(10)
>>> a[5] # 用整数作为下标可以获取数组中的某个元素
5
>>> a[3:5] # 用范围作为下标获取数组的一个切片,包括a[3]不包括a[5]
array([3, 4])
>>> a[:5] # 省略开始下标,表示从a[0]开始
array([0, 1, 2, 3, 4])
>>> a[:-1] # 下标可以使用负数,表示从数组后往前数
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a[2:4] = 100,101 # 下标还可以用来修改元素的值
>>> a
array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
>>> a[1:-1:2] # 范围中的第三个参数表示步长,2表示隔一个元素取一个元素
array([ 1, 101, 5, 7])
>>> a[::-1] # 省略范围的开始下标和结束下标,步长为-1,整个数组头尾颠倒
array([ 9, 8, 7, 6, 5, 4, 101, 100, 1, 0])
>>> a[5:1:-2] # 步长为负数时,开始下标必须大于结束下标
array([ 5, 101])

就2维数组来说

image.png

这是基本的获取方式,还有些高级的方法

使用整数序列

这里简单来2个练习,原文例子很多,就是通过下标来筛选数据

a = np.arange(-5,5,1)

a
Out[68]: array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])

a[[1,3,5]]
Out[69]: array([-4, -2, 0])

使用布尔数组

按照传入的布尔数组,只有为True的才返回,也叫布尔型索引

a=np.array([-3,1,5])

a
Out[72]: array([-3, 1, 5])

a[[False,True,False]]
Out[73]: array([1])

a[[True,False,True]]
Out[74]: array([-3, 5])

3.附录(参考资料)

文档:https://docs.scipy.org/doc/numpy-dev/reference/index.html#reference

numpy快速处理数据

推荐 1
本文由 liutangwow 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册