答案 0 :(得分:5)
我得到了同样的错误,但在我的情况下,我从dict.value中减去dict.key。我已经通过从其他dict.value中减去相应键的dict.value来修复此问题。
cosine_sim = cosine_similarity(e_b-e_a, w-e_c)
这里我得到了错误,因为e_b,e_a和e_c分别嵌入了字a,b,c的向量。我不知道'w'是字符串,当我找到w是字符串然后我通过以下行解决这个问题:
cosine_sim = cosine_similarity(e_b-e_a, word_to_vec_map[w]-e_c)
现在我减去了键
的相应值,而不是减去dict.key答案 1 :(得分:2)
我自己也很陌生,但我遇到了类似的错误,发现它是由于类型转换问题造成的。我试图连接而不是采取差异,但我认为这里的原理是一样的。我在另一个question上提供了类似的答案,所以我希望没关系。
本质上你需要使用不同的数据类型转换,在我的情况下我需要str不浮动,我怀疑你的是相同的,所以我建议的解决方案是。对不起我在建议之前无法测试它,但我从你的例子中不清楚你在做什么。
return diff(str(a[slice1])-str(a[slice2]), n-1, axis=axis)
请参阅下面的示例代码以修复我的代码,更改发生在第三行到最后一行。代码是生成一个基本的随机森林模型。
import scipy
import math
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn import preprocessing, metrics, cross_validation
Data = pd.read_csv("Free_Energy_exp.csv", sep=",")
Data = Data.fillna(Data.mean()) # replace the NA values with the mean of the descriptor
header = Data.columns.values # Ues the column headers as the descriptor labels
Data.head()
test_name = "Test.csv"
npArray = np.array(Data)
print header.shape
npheader = np.array(header[1:-1])
print("Array shape X = %d, Y = %d " % (npArray.shape))
datax, datay = npArray.shape
names = npArray[:,0]
X = npArray[:,1:-1].astype(float)
y = npArray[:,-1] .astype(float)
X = preprocessing.scale(X)
XTrain, XTest, yTrain, yTest = cross_validation.train_test_split(X,y, random_state=0)
# Predictions results initialised
RFpredictions = []
RF = RandomForestRegressor(n_estimators = 10, max_features = 5, max_depth = 5, random_state=0)
RF.fit(XTrain, yTrain) # Train the model
print("Training R2 = %5.2f" % RF.score(XTrain,yTrain))
RFpreds = RF.predict(XTest)
with open(test_name,'a') as fpred :
lenpredictions = len(RFpreds)
lentrue = yTest.shape[0]
if lenpredictions == lentrue :
fpred.write("Names/Label,, Prediction Random Forest,, True Value,\n")
for i in range(0,lenpredictions) :
fpred.write(RFpreds[i]+",,"+yTest[i]+",\n")
else :
print "ERROR - names, prediction and true value array size mismatch."
这会导致错误;
Traceback (most recent call last):
File "min_example.py", line 40, in <module>
fpred.write(RFpreds[i]+",,"+yTest[i]+",\n")
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')
解决方案是在第三行到最后一行使每个变量成为str()类型,然后写入文件。上面没有对代码进行任何其他更改。
import scipy
import math
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn import preprocessing, metrics, cross_validation
Data = pd.read_csv("Free_Energy_exp.csv", sep=",")
Data = Data.fillna(Data.mean()) # replace the NA values with the mean of the descriptor
header = Data.columns.values # Ues the column headers as the descriptor labels
Data.head()
test_name = "Test.csv"
npArray = np.array(Data)
print header.shape
npheader = np.array(header[1:-1])
print("Array shape X = %d, Y = %d " % (npArray.shape))
datax, datay = npArray.shape
names = npArray[:,0]
X = npArray[:,1:-1].astype(float)
y = npArray[:,-1] .astype(float)
X = preprocessing.scale(X)
XTrain, XTest, yTrain, yTest = cross_validation.train_test_split(X,y, random_state=0)
# Predictions results initialised
RFpredictions = []
RF = RandomForestRegressor(n_estimators = 10, max_features = 5, max_depth = 5, random_state=0)
RF.fit(XTrain, yTrain) # Train the model
print("Training R2 = %5.2f" % RF.score(XTrain,yTrain))
RFpreds = RF.predict(XTest)
with open(test_name,'a') as fpred :
lenpredictions = len(RFpreds)
lentrue = yTest.shape[0]
if lenpredictions == lentrue :
fpred.write("Names/Label,, Prediction Random Forest,, True Value,\n")
for i in range(0,lenpredictions) :
fpred.write(str(RFpreds[i])+",,"+str(yTest[i])+",\n")
else :
print "ERROR - names, prediction and true value array size mismatch."
这些示例来自更大的代码,所以我希望这些示例足够清晰。
答案 2 :(得分:1)
我有一个类似的问题,我迭代的数据帧的一行中的整数类型是&#39; numpy.int64&#39;。我得到了&#34; TypeError:ufunc&#39;减去&#39;没有包含签名匹配类型dtype的循环(&#39;
最简单的修复方法是使用pd.to_numeric(row)转换行
答案 3 :(得分:0)
为什么将diff
应用于字符串数组。
我在同一点遇到错误,但有不同的消息
In [23]: a=np.array([u'A' u'B' u'C' u'D' u'E'])
In [24]: np.diff(a)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-9d5a62fc3ff0> in <module>()
----> 1 np.diff(a)
C:\Users\paul\AppData\Local\Enthought\Canopy\User\lib\site-packages\numpy\lib\function_base.pyc in diff(a, n, axis)
1112 return diff(a[slice1]-a[slice2], n-1, axis=axis)
1113 else:
-> 1114 return a[slice1]-a[slice2]
1115
1116
TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray'
此a
数组是bins
参数吗?文档说bins
应该是什么?
答案 4 :(得分:0)
我认为@James 是对的。我在处理 Polyval() 时遇到了同样的错误。是的,解决方案是使用相同类型的变量。您可以使用 typecast 将所有变量强制转换为同一类型。
以下是示例代码
import numpy
P = numpy.array(input().split(), float)
x = float(input())
print(numpy.polyval(P,x))
这里我使用 float 作为输出类型。所以即使用户输入 INT 值(整数)。最终答案将被类型转换为浮动。