我从GitHub得到了一些自组织地图(GSOM)的代码 (在实施文档中介绍了用于理解GSOM机制的所有必需信息。)
我试图在PyCharm版本2018.1.4中使用python 3.6作为Project Interpreter运行它,但是遇到了此错误:
ValueError:太多值无法解包(预期2)
上面的错误与GSOM类的构造函数有关,尤其是在以下循环中:
for fn,t in dataset:
arr = scipy.array(t)
self.data.append([fn,arr])
我知道此错误是循环中的常见错误,我不得不说我尝试了有关此错误的所有堆栈溢出解决方案,例如,我使用了 iteritems()之类的函数,但之后我遇到以下错误:
AttributeError:“ numpy.ndarray”对象没有属性“ iteritems”
我为使用此实现编写的代码如下:
from gsom import GSOM
import numpy as np
dataset = np.array([
[1., 0., 0.],
[1., 0., 1.],
[0., 0., 0.5],
[0.125, 0.529, 1.0],
[0.33, 0.4, 0.67],
[0.6, 0.5, 1.0],
[0., 1., 0.],
[1., 0., 0.],
[0., 1., 1.],
[1., 0., 1.],
[1., 1., 0.],
[1., 1., 1.],
[.33, .33, .33],
[.5, .5, .5],
[.66, .66, .66]])
SF = 0.5
Test = GSOM(dataset, SF)
顺便说一下,我是一名普通的python程序员,我将使用此实现作为硕士论文的主要部分,以使用二维网格可视化高维数据。
我上面使用的数据集是3维的(具有三个属性),并且是理解GSOM实现性能的简单示例。
我不得不提到,我将在论文中使用的原始数据集具有20多个属性。
答案 0 :(得分:0)
为在经过4个小时的完整搜索后解决此错误!我发现我必须使用以下代码:
for fn, t in np.ndenumerate(dataset):
arr = scipy.array(t)
self.data.append([fn, arr])
ndenumerate()是从numpy到正确地在numpy ndarray中循环的关键功能。
谢谢我! :)