非专业打字员 2019-06-25 23:57 采纳率: 33.3%
浏览 1843
已采纳

numpy的shape函数返回值问题,具体一点:shape的返回值为什么因数据量的多少发生了改变

使用自己的数据进行tensorflow相关实验时发现 tf.convert_to_tensor(data)报错,提示需要的是二进制或字符串而data是一个['...','..',...]形式的数据

而label则能跑通

输入的文件是4002个浮点数一行,共8400行,前4000个是data,后两个表示label

最主要的是通过对函数返回的data和label使用shape函数得到的结果却大不一样!

先附上代码

def loadDataSet(filename):
    dataL = []
    labelL = []
    fr = open(filename)
    #for line in fr.readlines():
    for i in range(100):
        line = fr.readline()
        lineArr = line.strip().split(' ')
        npy = array(lineArr)
        dataL.append(npy[:-2])
        labelL.append(npy[-2:])
    fr.close()
    data = array(dataL)
    label = array(labelL)
    print(len(data),len(label))
    return data,label

t_x,t_y = loadDataSet('rand_out.txt')

train_y = tf.convert_to_tensor(t_y)

print(type(train_y))
print(type(t_y))
print(type(t_x))
print(len(t_x[0]))
print(len(t_y[0]))
print(t_x.shape)
print(t_y.shape)

发现在上述代码中循环变量i的取值范围直接影响print的输出结果
图片说明

可以看出i的循环范围大于某个数后,data也就是上面代码中的t_x.shape输出从(int,int)变成了(int,)
即for i in range(4000)时,shape是(4000,);for i in range(100)时,shape是(100,4000)

  • 写回答

1条回答 默认 最新

  • 吃鸡王者 2019-06-26 10:19
    关注

    t_x.shape 是 你读入的数据尺寸,正常来讲在你的循环不大于你的数据总行数时,他的值应该是(循环次数,4000),
    你在循环次数大于100之后,开始出现(int,)这种情况肯定是的的元数据有问题,打开你的数据文件,100行之后的肯定出现了只有标签没有数据的行
    把这些行删除,或在读取数据是对数据做一个筛选就ok了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建