1.NumPy 数组的基本属性
NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。NumPy中,每个线性的数组称为轴(axis),维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所一维数组就是 NumPy 的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。轴的数量—秩,就是数组的维数。很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,对每列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
2.ndarray 对象属性
(1)ndarray.ndim:数组的秩(rank),数组的维度数量或轴的数量。
(2)ndarray.shape:数组的维度,表示数组在每个轴的大小。对于二维数组(矩阵),表示其行数和列数。
(3)ndarray.size:数组中元素的总个数,等于 ndarray.shape 各个轴上大小的乘积。
(4)ndarray.dtype:数组中元素的数据类型。
(5)ndarray.itemsize:数组中每个元素的大小,以字节为单位。
(6)ndarray.flags:包含有关内存布局的信息,如是否为 C 或 Fortran 连续存储,是否为只读等。
(7)ndarray.real:数组中每个元素的实部(如果元素类型为复数)。
(8)ndarray.imag :数组中每个元素的虚部(若元素类型为复数)。
(9)ndarray.data:实际存储数组元素缓冲区,一般通过索引访问元素,不直接使用该属性。
3.ndarray.ndim 用于获取数组的维度数量(数组轴数)
import numpy as npa = np.arange(24)
print (a.ndim) # a 现只有一个维度
# 现在调整其大小
b = a.reshape(2,4,3) # b 现在拥有三个维度
print (b.ndim)
(1)创建一维数组:a = np.arange(24) 创建一个一维数组 a,包含 0 到 23 的整数,总共有 24 个元素。np.arange(24) 生成一个范围从 0 到 23 的数组。print(a.ndim) 输出 a 的维度数,因为 a 是一维数组,所以输出 1。
(2)调整数组形状:b = a.reshape(2, 4, 3) 将 a 重新调整为一个 2x4x3 的三维数组 b。reshape(2, 4, 3) 指定了新形状的大小:2 表示第一个维度的大小,4 表示第二个维度的大小,3 表示第三个维度的大小。这样可以确保 b 仍然包含 24 个元素(2 * 4 * 3 = 24)。print(b.ndim) 输出 b 的维度数,因为 b 是三维数组,所以输出 3。
4.ndarray.shape显示数组形状
ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。比如,一个二维数组,维度表示"行数"和"列数"。
import numpy as np a = np.array([[1,2,3],[4,5,6]])
print (a.shape)
(1)创建二维数组:a = np.array([[1, 2, 3], [4, 5, 6]]) 数组包含两个子列表,分别为 [1, 2, 3] 和 [4, 5, 6],因此数组 a结构是 2 x 3。数组 a 有 2 行和 3 列。
(2)输出数组形状:print(a.shape) 输出数组 a形状,结果为 (2, 3)。2 表示数组行数(2 行),3 表示数组列数(每行3 个元素)。
5.使用 shape 属性重新调整数组的形状
import numpy as npa = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
print (a)
(1)创建二维数组:a = np.array([[1, 2, 3], [4, 5, 6]]) 创建二维数组 a,初始形状为 (2, 3),即 2 行 3 列。
(2)调整数组形状:a.shape = (3, 2) 将数组 a 的形状更改为 (3, 2),3 行 2 列。在 numpy 中,直接修改 shape 属性可以重新排列数组的形状,只要元素总数不变(这里数组总共有 6 个元素,可以转换为 (3, 2) 的形状)。
(3)输出调整后数组:print(a) 输出调整后数组 a显示新形状内容。
6.使用reshape函数调整数组大小
import numpy as npa = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print (b)
(1)创建二维数组:a = np.array([[1, 2, 3], [4, 5, 6]]) 创建二维数组 a,初始形状为 (2, 3),即 2 行 3 列。
(2)调整数组形状:b = a.reshape(3, 2) 将数组 a 重新调整为 3 行 2 列的形状。reshape(3, 2) 指定新形状为 (3, 2),即 3 行 2 列。调整后的数组 b 会有同样的 6 个元素(因为原数组 a 有 6 个元素),但以 3 行 2 列的方式排列。
(3)输出调整后数组:print(b) 输出调整后数组 b显示新形状内容。
7.ndarray.itemsize 以字节形式返回数组每个元素大小
import numpy as np# 数组的 dtype 为 int8(一个字节)
x = np.array([1,2,3,4,5], dtype = np.int8)
print (x.itemsize)# 数组的 dtype 现在为 float64(八个字节)
y = np.array([1,2,3,4,5], dtype = np.float64)
print (y.itemsize)
(1)创建 int8 类型数组:x = np.array([1, 2, 3, 4, 5], dtype=np.int8) 创建数组 x,数据类型为 int8。int8 是8 位的数类型,占用 1 个字节的内存。print(x.itemsize) 输出 x 中每个元素的字节大小,由于 x 的数据类型是 int8,因此输出结果为 1。
(2)创建 float64 类型数组:y = np.array([1, 2, 3, 4, 5], dtype=np.float64) 创建了一个数组 y,数据类型为 float64。float64 是64 位的浮点数类型,占用 8 个字节内存。print(y.itemsize) 输出 y 每个元素的字节大小,y 的数据类型是 float64,输出结果为 8。
8.ndarray.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 npx = np.array([1,2,3,4,5])
print (x.flags)