web-dev-qa-db-fra.com

TypeError: ufunc 'add' ne contenait pas de boucle

J'utilise Anaconda et gdsCAD et j'obtiens une erreur lorsque tous les packages sont installés correctement. Comme expliqué ici: http://pythonhosted.org/gdsCAD/

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')

Mes importations ressemblent à ceci (au final j'ai tout importé):

import numpy as np
from gdsCAD import *
import matplotlib.pyplot as plt

Mon exemple de code ressemble à ceci:

something = core.Elements()
box=shapes.Box( (5,5),(1,5),0.5)
core.default_layer = 1
core.default_colors = 2
something.add(box)
something.show()

Mon message d'erreur ressemble à ceci:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-2f90b960c1c1> in <module>()
 31 puffer_wafer = shapes.Circle((0.,0.), puffer_wafer_radius, puffer_line_thickness)
 32 bp.add(puffer_wafer)
---> 33 bp.show()
 34 wafer = shapes.Circle((0.,0.), wafer_radius, wafer_line_thickness)
 35 bp.add(wafer)

C:\Users\rpilz\AppData\Local\Continuum\Anaconda2\lib\site-packages\gdscad-0.4.5-py2.7.Egg\gdsCAD\core.pyc in _show(self)
 80     ax.margins(0.1)
 81 
---> 82     artists=self.artist()
 83     for a in artists:
 84         a.set_transform(a.get_transform() + ax.transData)

C:\Users\rpilz\AppData\Local\Continuum\Anaconda2\lib\site-packages\gdscad-0.4.5-py2.7.Egg\gdsCAD\core.pyc in artist(self, color)
952         art=[]
953         for p in self:
--> 954             art+=p.artist()
955         return art
956 

C:\Users\rpilz\AppData\Local\Continuum\Anaconda2\lib\site-packages\gdscad-0.4.5-py2.7.Egg\gdsCAD\core.pyc in artist(self, color)
475         poly = lines.buffer(self.width/2.)
476 
--> 477         return [descartes.PolygonPatch(poly, lw=0, **self._layer_properties(self.layer))]
478 
479 

C:\Users\rpilz\AppData\Local\Continuum\Anaconda2\lib\site-packages\gdscad-0.4.5-py2.7.Egg\gdsCAD\core.pyc in _layer_properties(layer)
103         # Default colors from previous versions
104         colors = ['k', 'r', 'g', 'b', 'c', 'm', 'y']
--> 105         colors += matplotlib.cm.Gist_ncar(np.linspace(0.98, 0, 15))
106         color = colors[layer % len(colors)]
107         return {'color': color}

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')    
10
Raphael Pilz

Le gdsCAD a été une douleur de l'installation galbée à ce problème de traçage.
Ce problème est dû au fait qu'un type de données incorrect est transmis à la fonction couleurs. Il peut être résolu en modifiant la ligne suivante dans core.py

colors += matplotlib.cm.Gist_ncar(np.linspace(0.98, 0, 15))

à

colors += list(matplotlib.cm.Gist_ncar(np.linspace(0.98, 0, 15)))

Si vous ne savez pas où se trouve le core.py. Tapez simplement:

from gdsCAD import *
core

Cela vous donnera le chemin du fichier core.py. Bonne chance !

5
Amit Solanki

Je ne sais pas si cela aide, je suis assez nouveau dans ce domaine moi-même, mais j'ai eu une erreur similaire et j'ai constaté que cela était dû à un problème de casting de type, comme suggéré par la réponse précédente. Je ne vois pas dans l'exemple de la question exactement ce que vous essayez de faire. Voici un petit exemple de mon problème et de ma solution. Mon code crée un modèle de forêt aléatoire simple à l'aide de scikit learn.

Voici un exemple qui donnera l'erreur et elle est causée par la troisième à la dernière ligne, concaténant les résultats à écrire dans le fichier.

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."

Cela conduit à une erreur de;

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')

La solution consiste à faire de chaque variable un type str () sur la troisième à la dernière ligne puis à écrire dans un fichier. Aucune autre modification n'a été apportée au code ci-dessus.

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."

Ces exemples proviennent d'un code plus large, donc j'espère que les exemples sont suffisamment clairs.

1
James

Eh bien tout d'abord, je vous demanderais d'inclure le code réel, car `` l'exemple de code '' dans le fichier est évidemment différent en fonction du traçage. Lors du débogage, les détails sont importants et je dois pouvoir exécuter le code.

Vous avez évidemment un problème de type de données. Les chances sont plutôt bonnes, c'est dans les variables ici:

puffer_wafer = shapes.Circle((0.,0.), puffer_wafer_radius, puffer_line_thickness)

J'ai eu la même erreur lorsque j'ai lancé un appel aux Pandas. J'ai changé les données en str (données) et le code a fonctionné.

1
Michael Tamillow