三维python list 与 torch.tensor中共同的维度数量问题

我们知道诸如一个三维的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个子数组维度并非均等,但并未出现存取值异常。
输出的三维列表aaa的取值情况随后我们将其转为np数组输出:

aaa_np = np.array(aaa)

此时可见,生成的ndarray却是以二维list形式存储的,并非三维np数组。
转为np数组的aaa出现异常但当我们将三维列表aaa6个子数组维度设为均等时(如取 data < 61),奇迹出现了:
子数组维度均等,ndarray正常,以数组形式存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值