内容索引

  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 [ ]: