NumPy 数组属性
在本章中,我们将讨论 NumPy 的各种数组属性。
NumPy 的数组中比较重要 ndarray 对象属性有:
序号 | 属性 | 说明 |
---|---|---|
1 | ndarray.ndim | 秩,即轴的数量或维度的数量 |
2 | ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
3 | ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
4 | ndarray.dtype | ndarray 对象的元素类型 |
5 | ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
6 | ndarray.flags | ndarray 对象的内存信息 |
7 | ndarray.real | ndarray元素的实部 |
8 | ndarray.imag | ndarray 元素的虚部 |
9 | ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
在上表中我们注意到 秩 这个词,首先我们解释一下这个词的含义
NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
ndarray.shape
此数组属性返回一个由数组维度组成的元组。它还可用于调整数组的大小。
示例
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print (a.shape)
运行结果如下
(2, 3)
下面代码我们将一个 两行三列的数组转换成一个三行两列的数组
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
print(a)
运行结果如下
[[1, 2]
[3, 4]
[5, 6]]
最后再让我们列举一个关于 ndarray.shape 的示例。NumPy 还提供了一个 reshape
函数来调整数组的大小。下面使用 reshape
函数将两行三列的数组转成一个三行两列的数组
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print(b)
运行结果如下
[[1, 2]
[3, 4]
[5, 6]]
ndarray.ndim
此数组属性返回数组维数。
下面我们通过示例来看一下该属性的用法
示例
下面示例使用 arange函数创建一个一维数组,元素是从 0 - 23
import numpy as np
a = np.arange(24)
print(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]
然后将上面示例的一维数组转成一个三维数组
import numpy as np
a = np.arange(24)
print(a.ndim) # 查看 a 的维数
# 现在 使用 reshape函数对其进行转换
b = a.reshape(2,4,3)
print (b)
print (b.ndim) # 查看 b 的维数
运行结果如下
1
[[[ 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
numpy.itemsize
此数组属性以字节为单位返回数组中每个元素的长度。
示例
一个 int8 元素的长度为 1,int8 占 8 位,8位为 1 字节。
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.int8)
print(x.itemsize)
运行结果如下
1
我们再来看一个例子
一个 float32 元素的长度为 4,float32 占 32 位,8位为 1 字节。所以float32长度为 4 字节。
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.float32)
print(x.itemsize)
运行结果如下
4
numpy.flags
ndarray 对象具有以下属性。它的当前值由此函数返回。
序号 | 属性 | 描述 |
---|---|---|
1 | C_CONTIGUOUS (C) | 数据是在一个单一的C风格的连续段中 |
2 | F_CONTIGUOUS (F) | 数据是在一个单一的Fortran风格的连续段中 |
3 | OWNDATA (O) | 数组拥有它所使用的内存或从另一个对象中借用它 |
4 | WRITEABLE (W) | 数据区域可以被写入,将该值设置为 False,则数据为只读 |
5 | ALIGNED (A) | 数据和所有元素都适当地对齐到硬件上 |
6 | UPDATEIFCOPY (U) | 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新 |
示例
以下示例显示了标志的当前值。
import numpy as np
x = np.array([1,2,3,4,5])
print(x.flags)
运行结果如下
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False