(二)用 shape 读出数据的组织方式
1. 轴、维数与元素数
先固定含义:第 0 个轴表示天,第 1 个轴表示早晚时段。每个轴的长度依次放入 shape,因而三天两时段的形状为 (3,2)。
# 项目文件:demos/create_shape.py
# 形状保存每个轴的长度;一维长度 3 与三行一列是两种形状。
import numpy as np
a = np.array([[10, 20], [30, 40], [50, 60]], dtype=np.int64)
print("属性", a.ndim, a.shape, a.size, a.itemsize, a.nbytes)
print("标量", np.array(7).shape)
print("向量", np.array([1, 2, 3]).shape)
print("列形", np.array([[1], [2], [3]]).shape)
print("零", np.zeros((2, 3), dtype=np.int64).tolist())
print("一", np.ones((1, 2)).tolist())
print("序列", np.arange(0, 6, 2).tolist())
print("等距", np.linspace(0, 1, 5).tolist())第一行输出 2 (3, 2) 6 8 48:ndim 为 2,shape 为 (3,2),size 为 6,int64 每项占 8 字节,元素数据共占 48 字节。nbytes 只计算这些元素数据,数组对象自身还有保存形状等信息的开销。
| 写法 | shape | 含义 |
|---|---|---|
np.array(7) |
() |
没有轴的标量数组 |
np.array([1,2,3]) |
(3,) |
一个轴,长度为 3 |
np.array([[1,2,3]]) |
(1,3) |
一行三列 |
np.array([[1],[2],[3]]) |
(3,1) |
三行一列 |
一维数组还没有指定行或列。后面做广播、转置和矩阵运算时,这个区别会直接改变结果。
2. 按任务建立初值
zeros 按形状填 0,ones 填 1,full 可以填指定值。arange(0,6,2) 按步长取得 [0,2,4],不包含结束值 6;linspace(0,1,5) 取得包含两端的五个等距数,结果为 [0,0.25,0.5,0.75,1]。要确定采样点数量时,linspace 的含义更直接。
用二维嵌套列表建数组时,每行需要排成相同列数。若第一行有两个数、第二行只有一个,np.array 会报出无法组成规则形状;应先确认哪条记录缺失,再决定怎样保存。书名与数值也分别保存,避免把 np.array(["已读",1]) 中的整数转换成字符串。