web-dev-qa-db-ja.com

TypeError:ufunc 'add'にループが含まれていませんでした

AnacondaとgdsCADを使用していますが、すべてのパッケージが正しくインストールされているとエラーが発生します。ここで説明したように: http://pythonhosted.org/gdsCAD/

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

私のインポートは次のようになります(最終的にはすべてをインポートしました):

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

私のサンプルコードは次のようになります:

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

私のエラーメッセージは次のようになります。

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

GdsCADは、きちんとしたインストールからこのプロットの問題まで悩んでいます。
この問題は、colors関数に渡される誤ったデータ型が原因です。 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)))

Core.pyの場所がわからない場合。次のように入力してください:

from gdsCAD import *
core

これにより、core.pyファイルのパスがわかります。幸運を !

5
Amit Solanki

これが自分自身にかなり慣れているのに役立つかどうかはわかりませんが、同様のエラーがあり、以前の回答で提案されている型キャストの問題が原因であることがわかりました。質問の例から、あなたが何をしようとしているのか正確にはわかりません。以下は私の問題と解決策の小さな例です。私のコードはscikit learnを使用して単純なランダムフォレストモデルを作成しています。

エラーが発生する例を次に示します。これは、3行目から最後の行までが原因で、結果を連結してファイルに書き込みます。

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

解決策は、3番目から最後の行で各変数を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."

これらの例はより大きなコードからのものなので、例が十分に明確であることを願っています。

1
James

ファイルの「サンプルコード」はトレースバックに基づいて明らかに異なるため、最初に、実際のコードを含めてください。デバッグするとき、詳細が重要であり、実際にコードを実行できる必要があります。

明らかにデータ型の問題があります。チャンスはかなり良いです、ここの変数にあります:

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

Pandasへの呼び出しを実行しているときにも同じエラーがスローされました。データをstr(data)に変更し、コードは機能しました。

1