ValueError: слишком много значений для распаковки для почтового индекса python2.7

Я хочу показать документы и слова модели doc2vec с t-SNE в другом цвете. Я написал следующий код в python2.7. Но я получил ошибку. Я не использовал t-SNE и заговор в python до сих пор.

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

Если есть более 2 предметов в wordsвы получите ValueError: too many values to unpack, (Проверьте words.shape - это скорее всего (10000, 2).)

Если data сам по себе список многих x, y пары - например [(x1, y1), (x2, y2), ...] - и вам нужен отдельный список всех значений x и всех значений y, вы можете использовать zip() опять на data распаковывается как список параметров, используя * Префиксный оператор. Например:

x, y = zip(*data)

(Транспонирование data может также работать аналогично, например: data.T.)

Другие вопросы по тегам