我们知道诸如一个三维的torch.tenser中,设 torch.size() = (a, b, c)。则其中a个二维子张量(b, c)的维度应该均相等,最直观的就是,torch.cat函数不可以合并两个维度不同的张量。同理np数组中也是如此,但list中的元素作为具有较高的选择自由度,是否可以满足其子多维列表维度不同呢?—— 答案是可以
通过以下一个小程序分析:
首先,我们设置一个三维形式的等差数列数组 a:
import numpy as np
a = np.arange(60).reshape(((6,10,1)))
a 中共有6个二维子数组,均为10×1形式,我们取其每个子数组每行末尾的数字大小进行判断,已知值最大为 59,首先我们设其小于58。满足条件的子数组中的那行将以列表形式重新输出,格式与原输入相同,均为三维形式:
aaa = []
for i in range(0,6):
aa = []
for j,data in enumerate(a[i,:,-1]):
if data < 58:
b = a.tolist()
aa.append(b[i][j])
else: continue
aaa.append(aa)
Debug 时可见,三维列表aaa6个子数组维度并非均等,但并未出现存取值异常。
随后我们将其转为np数组输出:
aaa_np = np.array(aaa)
此时可见,生成的ndarray却是以二维list形式存储的,并非三维np数组。
但当我们将三维列表aaa6个子数组维度设为均等时(如取 data < 61),奇迹出现了: