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 –