【Numpy学习05】数组的属性

it2025-02-06  9

文章目录:

前言1.ndarray.ndim【例1】返回数组的维数 2.ndarray.shape【例2】返回数组的维度 3.ndarray.size【例3】返回数组元素的总个数 4.ndarray.dtype【例4】返回数组的元素类型 5.ndarray.itemsize【例5】返回数组中每一个元素的大小 6.ndarray.flags【例6】返回数组的内存信息 7.ndarray.real和ndarray.imag【例7】返回数组的实部和虚部 8.ndarray.data【例8】返回数组的缓冲区

注:为了节约行数,默认import numpy as np已经写在每段代码前,不再重复写入,如果有新的包引入,会在代码头部import

前言

在学过数组的创建之后,需要对数组进行进一步的了解,可以先从数组属性入手,Numpy中比较重要的数组属性如下:

属性说明ndarray.ndim秩,即轴的数量或维度的数量ndarray.shape数组的维度,对于矩阵,n 行 m 列ndarray.size数组元素的总个数,相当于 .shape 中 n*m 的值ndarray.dtypendarray 对象的元素类型ndarray.itemsizendarray 对象中每个元素的大小,以字节为单位ndarray.flagsndarray 对象的内存信息ndarray.realndarray 元素的实部(复数的实部)ndarray.imagndarray 元素的虚部(复数的虚部)ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

接下来让我们分别介绍。

1.ndarray.ndim

NumPy 数组的维度(又称维数)称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。 NumPy 中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。

【例1】返回数组的维数

>>>a = np.arange(18) >>>print(a) >>>print(a.ndim) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17] 1 >>>b = a.reshape(2,3,3) >>>print(b) >>>print(b.ndim) [[[ 0 1 2] [ 3 4 5] [ 6 7 8]] [[ 9 10 11] [12 13 14] [15 16 17]]] 3 >>>print(a) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]

我们首先创建了一个1维Numpy数组a,数组元素有18个,通过ndarray.ndim属性可以查看数组a的维数是1。然后通过reshape方法生成数组b(注:此时数组a不被改变),然后打印数组b的维数为3。

2.ndarray.shape

【例2】返回数组的维度

>>>a = [x+1 for x in range(3)] >>>b = [x+3 for x in a] >>>c = np.array([a]+[b]) >>>print(c.shape,type(c.shape)) (2, 3) <class 'tuple'> #采用reshape方式 >>>d = c.reshape(3,2) >>>print(d,d.shape,type(d)) [[1 2] [3 4] [5 6]] <class 'numpy.ndarray'> #直接改shape >>>c.shape = (3,2) >>>print(c,d.shape,type(c)) [[1 2] [3 4] [5 6]] <class 'numpy.ndarray'>

可以看到shape属性可以返回数组的维度,在上述案例中,shape返回的是一个元组tuple。我们可以通过直接设置shape或者reshape改变一个数组的shape,请注意后者不直接改变原数组,而是生成一个新数组,如c生成了d,但是c本身没有变化,直到我们通过c.shape = (3,2)改变了它。

3.ndarray.size

【例3】返回数组元素的总个数

>>>a = [x+1 for x in range(3)] >>>b = [x+3 for x in a] >>>def getSize(data): >>> return np.array(data).size >>>print(getSize(a),getSize(b),getSize([a]+[b])) 3 3 6

这里我们新建一个getSize函数,用来利用list新建ndarray数组并且返回其size。

4.ndarray.dtype

【例4】返回数组的元素类型

>>>x = np.arange(5, dtype = np.int8) >>>print(x.dtype) int8 >>>y = np.array(5, dtype = np.int16) >>>print(y.dtype) int16

这个在前面的数据类型里面有介绍,不加赘述。

5.ndarray.itemsize

【例5】返回数组中每一个元素的大小

>>>x = np.arange(5, dtype = np.int8) >>>print (x.itemsize) 1 >>>y = np.array(5, dtype = np.float64) >>>print (y.itemsize) 8

可以看到int8型数组元素大小为1字节,float64型数组元素大小为8字节。

6.ndarray.flags

属性描述C_CONTIGUOUS ©数据是在一个单一的C风格的连续段中F_CONTIGUOUS (F)数据是在一个单一的Fortran风格的连续段中OWNDATA (O)数组拥有它所使用的内存或从另一个对象中借用它WRITEABLE (W)数据区域可以被写入,将该值设置为 False,则数据为只读ALIGNED (A)数据和所有元素都适当地对齐到硬件上UPDATEIFCOPY (U)这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

【例6】返回数组的内存信息

>>>x = np.arange(5, dtype = np.int8) >>>print(x.flags) C_CONTIGUOUS : True F_CONTIGUOUS : True OWNDATA : True WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False UPDATEIFCOPY : False

这里比较重要的是 flags.owndata 属性,它表示该数组是否拥有数据,会配合后面的深浅复制使用。

7.ndarray.real和ndarray.imag

【例7】返回数组的实部和虚部

>>>x = np.sqrt([1 + 0j, 2 + 1j]) >>>print(x.real) >>>print(x.imag) [1. 1.45534669] [0. 0.34356075]

np.sqrt是numpy提供的求平方根的方法,运算后我们利用real和imag提取的实部和虚部

8.ndarray.data

【例8】返回数组的缓冲区

>>>x = np.arange(5, dtype = np.int8) >>>print(x.data) <memory at 0x000001FF29FDA280>

由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

最新回复(0)