Python数据分析(4)-numpy数组的属性操作1. ndarray的属性2. ndarray元素的属性3. ndarray元素的类型

numpy数组也就是ndarray,它的本质是一个对象,那么一定具有一些对象描述的属性,同时,它还有元素,其元素也有一些属性。本节主要介绍ndarray以及其元素的属性和属性的操作。


1. ndarray的属性

ndarray有两个属性:维度(ndim)和每个维度的大小shape(也就是每个维度元素的个数)

    import numpy as np 
    a = np.arange(24)
    a.shape=(2,3,4)
    print('数组为:', a)
    print('数组的维度:', a.ndim)
    print('数组维度的大小',a.shape)
    输出:
    数组为: [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
    
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]
    数组的维度: 3
    数组维度的大小 (2, 3, 4)
[/code]

对于ndarray数组的属性的操作只能操作其shape,也就是每个维度的个数,同时也就改变了维度(shape是一个元组,它的长度就是维度(ndim)),下面介绍两种改变数组shape的方式:

```code
    import numpy as np 
    a = np.arange(24)
    a.shape=(2,3,4)
    
    # a.shape=(4,6),直接对a进行操作
    a.shape = (4,6)
    print('a:',a)
    
    #a.reshape(3,8)是返回一个修改后维度大小的新数组,不会修改原来的数组a
    b = a.reshape(3,8)
    print('b:',b)
[/code]

```code
    输出:
    a: [[ 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: [[ 0  1  2  3  4  5  6  7]
     [ 8  9 10 11 12 13 14 15]
     [16 17 18 19 20 21 22 23]]
[/code]

**notes:**

1.对shape直接赋值的方式是修改原数组的属性,没有返回新的数组。reshape的方式不会修改原数组的属性,一定会返回一个新的数  
组。  
2. 修改属性的时候,属性元素之和一定要等于数组的元素之和,例如原数组有24个元素,则属性只能修改为:一维:(24,)二维:(2,12)、(3,8)、(4,6),三维:(2,3,4),四维:(2,3,2,2)等 

#  2. ndarray元素的属性

  1. 单个元素所占存储的字节数:itemsize 
  2. 其他属性:flags   
![这里写图片描述](https://img-
blog.csdn.net/20180712094459371?)

```code
    import numpy as np 
    a = np.arange(24)
    a.shape=(2,3,4)
    
    print('单个元素所占字节数:',a.itemsize)
    print('元素其他属性:',a.flags)
[/code]

```code
    输出:
    单个元素所占字节数: 4
    元素其他属性:   C_CONTIGUOUS : True
      F_CONTIGUOUS : False
      OWNDATA : True
      WRITEABLE : True
      ALIGNED : True
      WRITEBACKIFCOPY : False
      UPDATEIFCOPY : False
[/code]

#  3. ndarray元素的类型

```code
    import numpy as np 
    a = np.arange(24)
    a.shape=(2,3,4)
    
    print('元素的类型',a.dtype)
    # 对dtype直接复制是直接在原数组上修改的方式
    a.dtype= 'float32'
    print('修改后的元素的类型',a.dtype)
    
    # astype不会修改原数组的类型,会返回一个新的数组
    b=a.astype('int32')
    print('修改后a的元素的类型',a.dtype)
    print('修改后b的元素的类型',b.dtype)
[/code]

```code
    元素的类型 int32
    修改后的元素的类型 float32
    修改后a的元素的类型 float32
    修改后b的元素的类型 int32
[/code]

**notes:** 注意dtype直接复制与astype的区别


![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210608151750993.gif)
上一篇:python期末考试复习


下一篇:数据可视化基础专题(36):NUMPY基础(1) Ndarray 对象