numpy学习(三)

2020-10-24  本文已影响0人  58506fd3fbed

一、数组迭代

除了for循环,Numpy 还提供另外一种更为优雅的遍历方法: apply_along_axis(func1d, axis, arr)

二、 数组操作

1 更改形状

1. numpy.ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。

2.numpy.ndarray.flat 将数组转换为一维的迭代器,可以用for访问数组每一个元素

2 数组转置

1. numpy.transpose(a, axes=None) Permute the dimensions of an array.

2. numpy.ndarray.T Same as self.transpose() , except that self is returned if self.ndim < 2 .

3 更改维度

4 数组组合

5 数组拆分

6 数组平铺

7 添加和删除元素

============改变数组的维度==================

已知reshape函数可以有一维数组形成多维数组

ravel函数可以展平数组

b.ravel()

flatten()函数也可以实现同样的功能

区别:ravel只提供视图view,而flatten分配内存存储

重塑:用元祖设置维度

>>> b.shape=(4,2,3)

>>> b

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]])

转置:

>>> b

array([0, 1],

       [2, 3])

>>> b.transpose()

array([0, 2],

       [1, 3])

=============数组的组合==============

>>> a

array([0, 1, 2],

       [3, 4, 5],

       [6, 7, 8])

>>> b = a*2

>>> b

array([ 0,  2,  4],

       [ 6,  8, 10],

       [12, 14, 16])

1.水平组合

>>> np.hstack((a,b))

array([ 0,  1,  2,  0,  2,  4],

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

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

>>> np.concatenate((a,b),axis=1)

array([ 0,  1,  2,  0,  2,  4],

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

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

2.垂直组合

>>> np.vstack((a,b))

array([ 0,  1,  2],

       [ 3,  4,  5],

       [ 6,  7,  8],

       [ 0,  2,  4],

       [ 6,  8, 10],

       [12, 14, 16])

>>> np.concatenate((a,b),axis=0)

array([ 0,  1,  2],

       [ 3,  4,  5],

       [ 6,  7,  8],

       [ 0,  2,  4],

       [ 6,  8, 10],

       [12, 14, 16])

3.深度组合:沿着纵轴方向组合

>>> np.dstack((a,b))

array([[ 0,  0],

        [ 1,  2],

        [ 2,  4],

       [ 3,  6],

        [ 4,  8],

        [ 5, 10],

       [ 6, 12],

        [ 7, 14],

        [ 8, 16]])

4.列组合column_stack()

一维数组:按列方向组合

二维数组:同hstack一样

5.行组合row_stack()

以为数组:按行方向组合

二维数组:和vstack一样

6.==用来比较两个数组

>>> a==b

array([ True, False, False],

       [False, False, False],

       [False, False, False], dtype=bool)

#True那个因为都是0啊

==================数组的分割===============

>>> a

array([0, 1, 2],

       [3, 4, 5],

       [6, 7, 8])

>>> b = a*2

>>> b

array([ 0,  2,  4],

       [ 6,  8, 10],

       [12, 14, 16])

1.水平分割(难道不是垂直分割???)

>>> np.hsplit(a,3)

[array([0],

       [3],

       [6]),

 array([1],

       [4],

       [7]),

array([2],

       [5],

       [8])]

split(a,3,axis=1)同理达到目的

2.垂直分割

>>> np.vsplit(a,3)

[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]

split(a,3,axis=0)同理达到目的

3.深度分割

某三维数组:::

>>> d = np.arange(27).reshape(3,3,3)

>>> d

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]])

深度分割后(即按照深度的方向分割)

注意:dsplite只对3维以上数组起作用

raise ValueError('dsplit only works on arrays of 3 or more dimensions')

ValueError: dsplit only works on arrays of 3 or more dimensions

>>> np.dsplit(d,3)

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

===================数组的属性=================

>>> a.shape  #数组维度

(3, 3)

>>> a.dtype  #元素类型

dtype('int32')

>>> a.size  #数组元素个数

9

>>> a.itemsize  #元素占用字节数

4

>>> a.nbytes  #整个数组占用存储空间=itemsize*size

36

>>> a.T  #转置=transpose

array([0, 3, 6],

       [1, 4, 7],

       [2, 5, 8])

flat属性

上一篇 下一篇

猜你喜欢

热点阅读