微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决ValueError:预期的2D数组,而在python中得到标量数组错误?

如何解决如何解决ValueError:预期的2D数组,而在python中得到标量数组错误?

我有一个nX2维数组,并且定义了一些HMM模型。现在,对于存在的每个HMM模型,我正在尝试为nx2数组中存在的每个值计算对数似然值。为此,我在hmmlearn包中使用了得分功能

LINK:https://hmmlearn.readthedocs.io/en/latest/api.html#hmmlearn.base._BaseHMM.score

作为参考,以下是我编写的代码

定义一种HMM模型:

HMMmodel = hmm.GaussianHMM(n_components=3,covariance_type="full",n_iter=10)
HMMmodel.fit(Sdata2)

HMMpredict = HMMmodel.predict(Sdata2)

HMMmodel.transmat_

然后是与score函数一起使用的数据集:

[[-1.72914138 -1.63633714]
 [-1.72914138 -1.63633714]
 [-1.69620469 -1.63633714]
 ...
 [-1.72226929 -1.63633714]
 [-1.71539655 -1.63633714]
 [-1.72914138 -1.63633714]]

查找分数的代码

score1 = list()
score2 = list()
score3 = list()
score4 = list()

for x in np.nditer(Sdata3):
    score1.append(HMMmodel.score(x))
    score2.append(HMMmodel2.score(x))
    score3.append(HMMmodel3.score(x))
    score4.append(HMMmodel4.score(x))

这时遇到错误

ValueError: Expected 2D array,got scalar array instead:
array=-1.7291413774395343.

我已经在该站点上阅读了一些类似的问题,并尝试使用(-1,1)和(1,-1)重塑我的数组,但它会产生相同的错误

任何解决错误的技术将不胜感激。谢谢!

解决方法

好的,我想我已经解决了。

我所做的是我从数据集中获取了一个[1x2]序列,然后使用重塑函数将其转换为[2x1]序列。转换后,score函数接受了它,程序运行顺利。

这是修改后的代码:

score1 = list()
score2 = list()
score3 = list()
score4 = list()

for x in Sdata3:
    y = np.reshape(x,(2,1))
    score1.append(HMMmodel.score(y))
    score2.append(HMMmodel2.score(y))
    score3.append(HMMmodel3.score(y))
    score4.append(HMMmodel4.score(y))

我希望这能帮助面临类似问题的任何人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。