内容索引

  1. 数组组合 使用vstack、dstack、hstack、column_stack、row_stack以及concatenate函数完成数组的组合

  2. 数组分割 使用hsplit、vsplit、dsplit和split函数

  3. 数组属性

  4. 数组转换 tolist、astype函数

In [3]:
%pylab
Using matplotlib backend: TkAgg
Populating the interactive namespace from numpy and matplotlib

1. 数组的组合

Numpy数组有水平组合、垂直组合和深度组合等多种组合方式,我们将使用vstack、dstack、hstack、column_stack、row_stack以及concatenate函数完成数组的组合

In [6]:
a = arange(9).reshape(3,3)
b = 2*a
print 'a: \n',a
print 'b: \n',b
a: 
[[0 1 2]
 [3 4 5]
 [6 7 8]]
b: 
[[ 0  2  4]
 [ 6  8 10]
 [12 14 16]]

(1)水平组合

将ndarray对象构成的元组作为参数,传给hstack函数 或者使用concatenate函数实现该功能

In [7]:
hstack((a, b))
Out[7]:
array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])
In [8]:
concatenate((a,b), axis=1)
Out[8]:
array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])

(2)垂直组合

vstack函数 concatenate函数,axis参数设置为0

In [9]:
vstack((a,b))
Out[9]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])
In [10]:
concatenate((a,b), axis=0)
Out[10]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

(3)深度组合

深度组合,就是将一系列数组沿着纵轴(深度)方向进行层叠组合。

In [11]:
dstack((a,b))
Out[11]:
array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],

       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],

       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])

(4)列组合

column_stack函数。

对于一维数组将按列方向进行组合。

对于二维数组,效果和hstack一样。

In [12]:
oned = arange(2)
twice_oned = 2 * oned

column_stack((oned, twice_oned))
Out[12]:
array([[0, 0],
       [1, 2]])
In [13]:
column_stack((a,b))
Out[13]:
array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])
In [14]:
column_stack((a,b)) == hstack((a,b))
Out[14]:
array([[ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True]], dtype=bool)

(5)行组合

按行方向进行组合。对于两个一维数组,将直接层叠起来合成一个二维数组;对于二维数组,row_stack和vstack的效果一样。

In [15]:
row_stack((a,b))
Out[15]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

2. 数组的分割

Numpy数组可以进行水平、垂直和深度分割,相关的函数有hsplit、vsplit、dsplit和split。我们可以将数组分割成相同大小的子数组,也可以指定原数组中需要分割的位置。

(1)水平分割

In [16]:
a
Out[16]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
In [17]:
#将数组沿水平方向分割为3个相同大小的子数组
hsplit(a, 3)
Out[17]:
[array([[0],
        [3],
        [6]]), array([[1],
        [4],
        [7]]), array([[2],
        [5],
        [8]])]
In [18]:
#调用split函数,指定参数axis=1
split(a, 3, axis=1)
Out[18]:
[array([[0],
        [3],
        [6]]), array([[1],
        [4],
        [7]]), array([[2],
        [5],
        [8]])]

(2)垂直分割

In [19]:
vsplit(a, 3)
Out[19]:
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
In [20]:
split(a, 3, axis=0)
Out[20]:
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

(3)深度分割

In [21]:
c = arange(27).reshape(3,3,3)
In [22]:
c
Out[22]:
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])
In [23]:
dsplit(c, 3)
Out[23]:
[array([[[ 0],
         [ 3],
         [ 6]],
 
        [[ 9],
         [12],
         [15]],
 
        [[18],
         [21],
         [24]]]), array([[[ 1],
         [ 4],
         [ 7]],
 
        [[10],
         [13],
         [16]],
 
        [[19],
         [22],
         [25]]]), array([[[ 2],
         [ 5],
         [ 8]],
 
        [[11],
         [14],
         [17]],
 
        [[20],
         [23],
         [26]]])]

3. 数组的属性

  • ndim属性,给出数组的维度
  • size属性,给出数组元素的总个数
  • itemsize属性,给出数组元素在内存中所占的字节数
  • nbytes属性,给出整个数组所占存储空间,即itemsize和size属性的乘积
  • T属性,和transpose函数一样
  • real属性给出复数数组的实部,imag属性给出复数数组的虚部

flat属性将返回numpy.flatiter对象,这是获得flatiter对象的唯一方式。 这个所谓的“扁平迭代器”可以让我们像遍历一维数组一样遍历任意的多维数组。

In [24]:
b = arange(4).reshape(2,2)
In [25]:
b
Out[25]:
array([[0, 1],
       [2, 3]])
In [26]:
f = b.flat
f
Out[26]:
<numpy.flatiter at 0x50ddcb8>
In [27]:
for item in f:
    print item
0
1
2
3
In [28]:
#使用flatiter对象直接获取一个数组的元素
b.flat[2]
Out[28]:
2
In [29]:
b.flat[[1,3]]
Out[29]:
array([1, 3])
In [30]:
#对flat属性赋值将导致整个数组的元素被覆盖
b.flat = 7
In [31]:
b
Out[31]:
array([[7, 7],
       [7, 7]])
In [34]:
b.flat[[1,3]] = 1
b
Out[34]:
array([[7, 1],
       [7, 1]])

4. 数组的转换

tolist函数将numpy数组转换成python列表

In [35]:
b
Out[35]:
array([[7, 1],
       [7, 1]])
In [36]:
b.tolist()
Out[36]:
[[7, 1], [7, 1]]

astype函数可以在转换数组时指定数据类型

In [37]:
b.astype(float)
Out[37]:
array([[ 7.,  1.],
       [ 7.,  1.]])
In [ ]: