from numpy import genfromtxt, linalg, array, append, hstack, vstack
#Euclidean distance function
def euclidean(v1, v2):
dist = linalg.norm(v1 - v2)
return dist
#get the .csv files and eliminate heading and unused columns from test
BMUs = genfromtxt('BMU3.csv', delimiter=',')
data = genfromtxt('test.csv', delimiter=',')
data = data[1:, :-2]
i = 0
for obj in data:
D = 0
for BMU in BMUs:
Dist = append(euclidean(obj, BMU[: -2]), BMU[-2:])
D = hstack(Dist)
Map = vstack(D)
#iteration counter
i += 1
if not i % 1000:
print (i, ' of ', len(data))
print (Map)
我想要做的是:Python的構造在陣列矩陣迭代
- 以一個對象從數據
- 計算距離從BMU(歐幾里德(OBJ,BMU [:-2] )
- 追加到距離所述BMU陣列
- 創建一個包含所有的距離加上從數據對象(d = hstack(DIST)) 所有BMU的最後兩個項目的2D矩陣的最後兩個項目
- 創建一個長度等於數據中對象數量的矩陣數組。 (Map = vstack(D))
問題在這裏,或者至少是我認爲的問題是,hstack和vstack將作爲輸入數組的元組而不是單個數組。這就像我試圖使用它們,因爲我使用列表.append()列表,可悲的是我是一個初學者,我不知道如何做不同。
任何幫助將是真棒,謝謝提前:)
非常感謝你,會等待你的建議:) –
'BMU'和'data'的'shape'(和'dtype')是什麼?用樣本複製和測試代碼更容易。否則,我必須猜測並組成示例數組(如'data = np.arange(24).reshape(12,2)')。 – hpaulj
(243,7)BMUs.shape (19219,5)data.shape –