2017-03-10 36 views
1

私はPython-colormathを使ってLab色のリスト間の色差ΔE2000を計算しています。python-colormathのDelta E関数とパンダの使い方

私は2つのパンダデータフレーム(df1とdf2)を持っていますが、各データフレームにはLab値が記録されています。ここ

は私のコードです:

L1 = df1.L 
a1 = df1.a 
b1 = df1.b 

L2 = df2.L 
a2 = df2.a 
b2 = df2.b 

colors1 = LabColor(lab_l= L1, lab_a = a1, lab_b = b1) 
colors2 = LabColor(lab_l= L2, lab_a = a2, lab_b = b2) 

delta_e_76 = delta_e_cie1976(colors1, colors2) 

>> TypeError: cannot convert the series to <class 'float'> 

はLabColorクラスオブジェクトにパンダシリーズを変換する方法はありますか?

+0

(山車にLabColorsへの入力を強制しようとするcolormathを[ '自己.lab_l = float(lab_l) '](https://github.com/gtaylor/python-colormath/blob/master/colormath/color_objects.py#L304) –

+0

Delta E 2000または1976を使用しますか?あなたは2000を言うが、あなたのコードは1976を使用する。 –

+0

マイケルをありがとう、それは私を助けてくれる!私は2つの方程式(1974年と2000年)の違いを比較するために、実際に両方を使いたいと思っています。色ライブラリを使用するあなたのアイデアに続いて、私はそれを試して、それは働いた! :) – gus

答えて

0

python-colormathは、LabColorオブジェクトへの入力としてfloatに変換できないものの使用をサポートしていないようです。

python-colormathをそのまま使用したい場合は、関数を直接使用するのではなく、シリーズオブジェクトをループすることができます。

delta_e_76 = [] 
for L1, a1, b1, L2, a2, b2 in zip(df1.L, df1.a, df1.b, df2.L, df2.a, df2.b): 
    colors1 = LabColor(lab_l= L1, lab_a = a1, lab_b = b1) 
    colors2 = LabColor(lab_l= L2, lab_a = a2, lab_b = b2) 
    delta_e_76.append(delta_e_cie1976(colors1, colors2)) 

また、あなたはdelta_e_cie1976に設定して呼び出しをラップし、numpyののvectorize機能を使用して、それをラップしてみてください可能性があります。

@np.vectorize 
def delta_e_vectorized(L1, a1, b1, L2, a2, b2): 
    colors1 = LabColor(lab_l=L1, lab_a=a1, lab_b=b1) 
    colors2 = LabColor(lab_l=L2, lab_a=a2, lab_b=b2) 
    return delta_e_cie1976(colors1, colors2) 

delta_e_76 = delta_e_vectorized(df1.L, df1.a, df1.b, df2.L, df2.a, df2.b) 
0

python-colormathはそのLabColorオブジェクトへの入力としてfloatに変換することができないものの使用をサポートしていないようです。

ベクター化された計算の利点を維持するには、この種の操作をサポートする別のライブラリ、たとえばColourを使用します。 colourを使用して

(免責事項、私はこのプロジェクトに関わっています)

あなたは色の違いを計算するためにこれを行うことができます:

from colour import delta_E_CIE1976, tstack 

delta_e_76 = delta_E_CIE1976(tstack([df1.L, df1.a, df1.b]), 
          tstack([df2.L, df2.a, df2.b]), 
          ) 
関連する問題