小故事是:我试图通过使用逻辑零或任何其他方式删除数组中的精确点。numpy删除数组值(逻辑零)
我从定义翼的一些点的坐标开始。与他们在一起,我试图形成一个没有交叉线的好多边形。这是通过从第一点开始(任意一点),然后填充下一点作为离第一点最近的点。
坐标加载为xEdge和yEdge。我做的第一件事就是创建一个只有0的副本,如下所示。 xEdgeOrdered和yEdgeOrdered将被填充多边形点。我还将创建一个仅用于检查多边形已采用哪些值的类型。
xEdgeOrdered = np.zeros_like(xEdge)
yEdgeOrdered = np.zeros_like(xEdge)
notUsed = np.ones_like(xEdge)
然后,我们开始我们的多边形与y最大例如,这里开始的问题。
startIndex = np.argmax(yEdge)
xEdgeOrdered[0] = xEdge[startIndex]
notUsed[startIndex] = 0
在最后一行,当我状态NOTUSED [的startIndex] = 0,我真正想要做的是取代“拿来主义”的值作为逻辑0 - MATLAB中的“假”。目标是这个值不再可用,基本上从数组中删除。
我试图掩盖它(见下文),但我发现它不能在脚本的下一步完美工作。
notUsed = np.ma.masked_where(notUsed == 0, notUsed)
下一步是找到下一个最近点的循环。我将首先尝试描述我正在尝试在单词中做什么,然后我将附加我的代码(该代码尚未运行...)。
从初始点1开始,我需要使用向量长度来找到下一个最近的点。我会尝试所有剩余的点。要知道剩余的点是什么,我给我的函数的参数“notUsed”,记住是一个数组,如果不使用该点,则为“1”,如果使用该数组,则为0(由0表示“false” “但我们还没有找到如何)。 我所做的是让xEdge的翻版作为xEdgewhile,设置我们只是用来值为0,然后请其值= 0,应该屏蔽
一旦最小值被发现,索引位置被记录。使用它,我们可以在xEdgeOrderedn中填充这个新点并继续从这个新点开始的循环。但是,在此之前,我们需要删除刚刚使用的索引,以便它不再可用。如果我们在matlab中,我们不会使用(index)= false; - 问题是如何在Python中执行此操作?
这是我想出了代码:
i, z, min = 1, 0, 'inf'
xEdgewhile = xEdge + []; yEdgewhile = yEdge + [];
while i < len(xEdge):
i = i + 1
notUsedIndices = indexVector #This line might be useless
while z < len(xEdge):
distance = math.sqrt((xEdgewhile[z] - xEdgeOrdered[(i-1)])**2 + (yEdgewhile[z] - yEdgeOrdered[(i - 1)])**2)
if distance < min:
min, distance_min, = distance, z
z = z + 1
print min
xEdgeOrdered[i] = xEdge[distance_min]
yEdgeOrdered[i] = yEdge[distance_min]
xEdgewhile[distance_max], yEdgewhile[distance_min] = 0, 0
xEdgewhile = np.ma.masked_where(xEdgewhile == 0, xEdgewhile)
yEdgewhile = np.ma.masked_where(yEdgewhile == 0, yEdgewhile)
仅供参考,我也可以给你的MATLAB代码,如果有帮助。长话短说,我试图通过使用逻辑零或任何其他方式删除数组中的精确点。
为什么不把你不想使用的值设置为NaN或inf? – Trogdor 2014-08-29 16:16:19