Python ValueError:形状不匹配:无法将对象广播到单个形状

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python ValueError:形状不匹配:无法将对象广播到单个形状相关的知识,希望对你有一定的参考价值。

我的数据集文件看起来像

__label__ita Adesso datemi le chiavi.
__label__ara ياله من طفل محبب! يييي!
__label__eng You're a really bad bartender.
__label__epo En kiu hotelo vi restados?
__label__spa Él dijo haber perdido su vigor a los cuarenta.
__label__tat Сиңа булышмакчы идем.
__label__heb את מה פותח המפתח הזה?
__label__eng I caught a glimpse of him from the bus.
__label__eng I advise you to do that today.
__label__jpn この歌の歌い方を教えてくれますか。
__label__deu Ich habe gewusst, dass ihr Tom nicht vergessen würdet.

我正在使用此函数来解析第一列标签

def parse_labels(path):
    with open(path, 'r') as f:
        return np.array( list(map(lambda x: x[9:], f.read().decode('utf-8').split() )) )

所以我拆分行并通过示例从前缀ita获取__label__ita标签,但由于某种原因它打破了

test_labels = parse_labels(args.test)
print("Test labels:%d (sample)\n%s" % (len(test_labels),test_labels[:1]) )
print("labels:%s" % test_labels)

我明白了

Test labels:71828 (sample)
[u'ita']
labels:[u'ita' u'' u'' ... u'' u'' u'']

虽然我应该有

[u'ita',u'ara',u'eng',...]
答案

你问题的标题似乎与内容不符,我正在回答正文中提出的问题。我使您的代码更加模块化并进行了测试。它返回问题末尾的所需列表(u'ita',u'ara',u'eng',...]):

def parse_labels(path):
    test_labels = []
    with open(path,'rb') as f:
        for line in f:
            test_labels.append(line.decode('utf-8').split(' ')[0][10:])
        return [x for x in test_labels if x] #removes empty strings
parse_labels(args.test)
另一答案

由于语言代码在每行中都处于固定偏移量,因此可以使用列表推导更简单地处理。 data.txt是UTF-8编码的输入数据。此代码适用于Python 2和3:

from __future__ import print_function
import io

def parse_labels(path):
    with io.open(path,encoding='utf8') as f:
        return [line[9:12] for line in f]

print(parse_labels('data.txt'))

输出(Python 3):

['ita', 'ara', 'eng', 'epo', 'spa', 'tat', 'heb', 'eng', 'eng', 'jpn', 'deu']

以上是关于Python ValueError:形状不匹配:无法将对象广播到单个形状的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:“顺序”层的输入 0 与该层不兼容:预期形状 =(无,33714,12),找到形状 =(无,12)

ValueError:层顺序的输入0与层不兼容::预期的min_ndim = 4,发现ndim = 2。收到的完整形状:(无,1024)

ValueError:形状不匹配:如果类别是一个数组,它必须是形状(n_features,)

ValueError:形状 (3,1) 的不可广播输出操作数与广播形状 (3,4) 不匹配

Tensorflow ValueError:层“顺序”的输入0与层不兼容:预期形状=(无,20,20,3),找到形状=(无,20,3)

ValueError:检查目标时出错:预期activation_6具有形状(无,2)但得到的数组具有形状(5760,1)