您的位置:首页 > 编程语言 > Python开发

Numpy-数组的基本操作(二)

2017-11-27 15:37 239 查看
上一篇博客中,我们简单介绍了一下Numpy数组的使用,接下来将记录一下Numpy数组的更多操作。

数组分割

Numpy可以对数组进行水平、垂直和深度分割,我们可以将数组分割成大小相等的子数组,也可以指定原数组中需要分割的位置。

(1).
水平分割
,我们将通过
hsplit
函数沿着水平方向将多维数组分割成大小相等子数组,如下所示:

a = np.arange(8).reshape(2,4)
info = np.hsplit(a,4)
print info      # [array([[0],[4]]), array([[1],[5]]), array([[2],[6]]), array([[3],[7]])]


对于同样的数组,
split
函数同样可以实现同样的效果,如下所示:

info = np.split(a,3,axis=1)
print info      # [array([[0],[4]]), array([[1],[5]]), array([[2],[6]]), array([[3],[7]])]


在水平分割中,判断是否可以分割,我们可以看第二维度的值,假设其为m,需要将其分割成n份,如若m为n的倍数,即可以分割,否则不可分割

(2).
垂直分割
,我们可以通过
vsplit
函数沿着垂直方向将多维数组分割成大小相等的子数组,如下所示:

a = np.arange(8).reshape(2,4)
info = np.vsplit(a,2)
print info      # [array([[0],[1],[2],[3]]), array([[4],[5],[6],[7]])]


split
函数同样也可以实现
垂直分割
效果,只需要将
axis
设置为0(axis默认值为0)即可,如下所示:

info = np.split(a,2)
print info      # [array([[0],[1],[2],[3]]), array([[4],[5],[6],[7]])]


在垂直分割中,判断是否可以分割,我们可以看第一维度的值,假设其为m,需要将其分割成n份,如若m为n的倍数,即可以分割,否则不可分割

(3).
深度分割
,我们可以通过
dsplit
函数沿着深度方向将多维数组分割成大小相等的子数组,如下所示:

a = np.arange(12).reshape(2,3,2)
info = np.dsplit(a,2)       # [[[ 0  1][ 2  3][ 4  5]]  [[ 6  7][ 8  9][10 11]]]
print info                  # [array([[[ 0],[ 2],[ 4]], [[ 6],[ 8],[10]]]), array([[[ 1],[ 3],[ 5]], [[ 7],[ 9],[11]]])]


值得注意的是,深度分割只适用于3维或者更多维的数组。判断是否可以分割,我们可以看第三维度的值,假设其为m,需要将其分割成n份,如若m为n的倍数,即可以分割,否则不可分割

数组的属性

数组除了
dtype
shape
之外还有很多其他的属性,接下来将一一介绍:

ndim
,获取数组的维数,或者数组轴的个数:

data = np.arange(24).reshape(2,12)
print data.ndim         # 2


size
,获取数组元素的总个数:

data = np.arange(24).reshape(2,12)
print data.size         # 24


itemsize
,获取数组中每个元素所占的内存大小:

data = np.arange(24).reshape(2,12)
print data.itemsize     # 4


nbytes
,获取整个数组所占的内存大小:

data = np.arange(24).reshape(2,12)
print data.nbytes       # 96


T
T
属性与
transpose
函数效果一样,对于一维数组,
T
属性就是原数组:

data = np.arange(24).reshape(2,12)
print data.T            # [ [ 0 12][ 1 13][ 2 14][ 3 15][ 4 16][ 5 17][ 6 18][ 7 19][ 8 20][ 9 21][10 22][11 23] ]


flat
flat
属性将会返回一个
numpy.flatiter
对象,这是获得flatiter对象的唯一方式,我们无法访问flatiter的构造函数。这个“扁平迭代器”可以像迭代一维数组一样迭代任意多维数组:

data = np.arange(6).reshape(2,3)
for item in data.flat:
print item


复数数组

在Numpy中,复数的虚部是用
j
表示的,我们可以创建一个由复数构成的数组:

data = np.array([1.j + 1, 2.j + 3])
print data              # [ 1.+1.j  3.+2.j]
print data.dtype        # complex128


real
,获取复数数组的实部,如果复数数组只包含实部元素,那么
real
属性将输出原数组:

info = data.real
print info              # [ 1.  3.]


imag
,获取复数数组的虚部:

info = data.imag
print info              # [ 1.  2.]


数组的转换

我们知道,我们现在所说的数组是Numpy中的数组,是一个
numpy.ndarray
对象。那该怎么将其转换成Python中的数组呢?我们可以使用
tolist
函数来实现:

data = np.arange(6).reshape(2,3)
info = data.tolist()
print info              # [[0, 1, 2], [3, 4, 5]]
print type(info)        # <type 'list'>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numpy 函数