ValueError:python2.7 的 zip 解压的值太多

Posted

技术标签:

【中文标题】ValueError:python2.7 的 zip 解压的值太多【英文标题】:ValueError: too many values to unpack for zip of python2.7 【发布时间】:2018-08-25 15:04:54 【问题描述】:

我想用不同的颜色显示带有 t-SNE 的 doc2vec 模型的文档和单词。我在python2.7中编写了以下代码。但我得到了错误。到目前为止,我还没有在 python 中使用过 t-SNE 和绘图。

modelfile='/home/fl/models/Robust/dimention500/my_model.doc2vec'
wordNum=10000
docNum=1000
words_vec = []
words_label = []
docs_vec = []
docs_label = []
all_vec = []

model = gensim.models.Doc2Vec.load(modelfile)
w2v = model.wv.vocab
d2v = model.docvecs

lengthVoc=len(w2v)
ids=[None]*wordNum
for i in range(10000):
    ids[i]=random.randint(1,lengthVoc)
for i, word in enumerate(w2v.keys()):
    if i in ids:
            all_vec.append(model[word])
            words_vec.append(model[word])    
for j, doc in enumerate(d2v.doctags.keys()):
    if j in docids:
            all_vec.append(d2v[doc])
            docs_vec.append(d2v[doc])

words = TSNE(n_components=2).fit_transform(numpy.array(words_vec))
docs = TSNE(n_components=2).fit_transform(numpy.array(docs_vec))
all_dw = TSNE(n_components=2).fit_transform(numpy.array(all_vec))


g1=words
g2=docs
data = (g1, g2)
colors = ("red", "blue")
groups = ("word", "document") 

for data, color, group in zip(data, colors, groups):
    x, y = data
    plt.scatter(x, y, c=color, edgecolors='none', label=group)     
plt.title('Robust04')
plt.legend(loc=2)
plt.show()

我收到了这个错误:

Traceback (most recent call last):
File "test.py", line 91, in <module>
x, y = data
ValueError: too many values to unpack

当我将代码的以下部分更改为plt.scatter(all_dw[:, 0], all_dw[:, 1])时,它显示了图形,但所有单词和文档都有相同的颜色。

for data, color, group in zip(data, colors, groups):
    x, y = data
    plt.scatter(x, y, c=color, edgecolors='none', label=group)

【问题讨论】:

【参考方案1】:

检查zip(data, color, groups) 返回的内容 - 这可能不是您所期望的。

具体来说,它的第一个项目将在其第一个索引中包含g1——而不是(g1, g2) 元组。而g1 就是words。所以你的问题线本质上是:

x, y = words

如果words 中有两个以上的项目,您将获得ValueError: too many values to unpack。 (检查words.shape——很可能是(10000, 2)。)

如果data 本身是许多x, y 对的列表——例如[(x1, y1), (x2, y2), ...]——并且你需要一个所有x 值和所有y 值的单独列表,你实际上可以再次使用zip(),在data unpacked 使用 * 前缀运算符作为参数列表。例如:

x, y = zip(*data)

data 的转置也可能等效,例如:data.T。)

【讨论】:

以上是关于ValueError:python2.7 的 zip 解压的值太多的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:解包的值太多(Python 2.7)

Python 2.7/Scikit 学习 0.17 线性回归错误:ValueError:发现样本数量不一致的数组:[1 343]

在python 2.7中导入熊猫时出现“ValueError:未知语言环境:UTF-8” [重复]

ValueError: numpy.dtype 的大小错误,尝试重新编译

PyUSB ValueError:没有可用的后端

ValueError:无法配置处理程序“文件”:[Errno 13] 权限被拒绝: