特定のフィーチャに基づいてフィーチャマトリックスを作成し、アイテム間の距離を見つけることを試みています。 テスト目的のために私は現在2ポイントしか使用していません。numpyでlinalg.normの結果が異なります
データ:項目のリスト私は
スペック持っている:項目の機能のdict(私はアイテムの機能として、キーのそれらの値を使用しています)
機能:機能のリスト
これがあるとnumpyのゼロ行列を使用して、私のコード:
import numpy as np
matrix = np.zeros((len(data),len(features)),dtype=bool)
for dataindex,item in enumerate(data):
if dataindex > 5:
break
specs = item['specs']
values = [value.lower() for value in specs.values()]
for idx,feature in enumerate(features):
if(feature in values):
matrix[dataindex,idx] = 1
print dataindex,idx
v1 = matrix[0]
v2 = matrix[1]
# print v1.shape
diff = v2 - v1
dist = np.linalg.norm(diff)
print dist
私は取得していますDISTの値が1.0
012ですこれは、Pythonのリストを使用して、私のコードです:
matrix = []
for dataindex,item in enumerate(data):
if dataindex > 5:
f = open("Matrix.txt",'w')
f.write(str(matrix))
f.close()
break
print "Item" + str(dataindex)
row = []
specs = item['specs']
values = [value.lower() for value in specs.values()]
for idx,feature in enumerate(features):
if(feature in values):
print dataindex,idx
row.append(1)
else:
row.append(0)
matrix.append(row)
v1 = np.array(matrix[0]);
v2 = np.array(matrix[1]);
diff = v2 - v1
print diff
dist = np.linalg.norm(diff)
print dist
この場合、DISTの値が、私は値1は、両方のケースで同じ位置に設定されていることを多くの時間をチェックした4.35889894354
ですしかし答えは異なります。
numpyを正しく使用していないか、ロジックに問題があります。 メモリ効率のため、numpyゼロベースの行列を使用しています。
問題点は何ですか?