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)
我想做的是:
这里的问题,或者至少我认为是问题所在,是hstack和vstack希望输入一个数组的元组,而不是单个数组。就好像我在试着用我用的东西一样列表.append()对于列表,遗憾的是我是一个初学者,我不知道如何做不同的。你知道吗
任何帮助都会很棒,提前谢谢:)
感谢您的帮助,我成功地实现了伪代码,这里是最终的程序:
非常感谢,我希望这段代码将来能帮助其他人:)
首先是用法说明:
而不是:
使用
其次,远离
np.append
。太容易误用了。使用np.concatenate
这样您就可以完全了解它在做什么。你知道吗列表
append
更适合增量工作=====================
我猜没有样本数组(或者至少是形状)。但是(n,2)数组听起来是合理的。通过计算每对“点”之间的距离,我可以收集嵌套列表中的值:
把它做成一个数组:
嵌套循环的等效项:
有很多方法可以不用循环来实现这一点,但是让我们先确保基本的Python循环方法可以工作。你知道吗
================
如果我想要
data
中的每个元素(行)和bmu
(或此处data
)中的每个元素之间的差异(沿最后一个轴),我可以使用数组广播。结果是(3,3,2)数组:norm
可以处理更大维度的数组,并采用axis
参数。你知道吗相关问题 更多 >
编程相关推荐