在python中,如何读取运行在列表所有元素上的索引?
我这里有一个基本问题。我想生成随机位置,它们之间的距离最小。尽管如此,我所获得的最多的是一个位置列表,其中元素“n”的距离大于元素“n-1”,但它并不关心之前的所有“n-2,3,4,…”元素。这是我目前的代码:在python中,如何读取运行在列表所有元素上的索引?,python,list,for-loop,if-statement,Python,List,For Loop,If Statement,我这里有一个基本问题。我想生成随机位置,它们之间的距离最小。尽管如此,我所获得的最多的是一个位置列表,其中元素“n”的距离大于元素“n-1”,但它并不关心之前的所有“n-2,3,4,…”元素。这是我目前的代码: sample = input('How many elements do you want?') X = np.linspace(200,1900) Y = np.linspace(200,1900) Xin = np.random.choice(X,1) Yin = np.rando
sample = input('How many elements do you want?')
X = np.linspace(200,1900)
Y = np.linspace(200,1900)
Xin = np.random.choice(X,1)
Yin = np.random.choice(Y,1)
dmin = 1000
i = 1
a = [ ]
Xprev = [Xin]
Yprev = [Yin]
while (i<sample+1):
Xal = np.random.choice(X,1)
Yal = np.random.choice(Y,1)
if sqrt((Xal-Xprev[i-1])**2+(Yal-Yprev[i-1]**2) > dmin:
Xfin = Xal
Yfin = Yal
Xprev.append(Xfin)
Yprev.append(Yfin)
a_s = zip(Xfin,Yfin)
a.append(a_s)
out = vstack(a)
i = i+1
else:
i=i
sample=input('需要多少元素?'))
X=np.linspace(2001900)
Y=np.linspace(2001900)
Xin=np.随机选择(X,1)
Yin=np.随机选择(Y,1)
dmin=1000
i=1
a=[]
Xprev=[Xin]
Yprev=[Yin]
而(i)dmin:
Xfin=Xal
Yfin=Yal
Xprev.append(Xfin)
Yprev.append(Yfin)
a_s=zip(Xfin,Yfin)
a、 附加(a_s)
out=vstack(a)
i=i+1
其他:
i=i
我想我需要的是在if语句中更改Xprev的索引,该索引运行在X,Yprev列表的所有和每个元素上。您能解释一下如何做到这一点吗?提前感谢!您的问题看起来与此非常相似: 实现这一点的简单方法是迭代从
0
到i-1
的索引,并检查条件是否适用于所有索引
if all((Xal-Xprev[j])**2+(Yal-Yprev[j]**2) > dmin for j in xrange(i)):
...
或者,您可以使用numpy数组来更清晰地表达这一点
dmin2 = dmin**2 # Compute square of minimum distance
points = np.zeros((sample, 2))
points[0] = np.random.choice(X), np.random.choice(Y)
i = 1
while i < sample:
# Get a trial point
point = np.array((np.random.choice(X), np.random.choice(Y)))
# Check minimum distance to existing points
if np.min(np.sum(np.square(points[:i] - point), 1)) > dmin2:
points[i] = point
i += 1
dmin2=dmin**2#计算最小距离的平方
点=np.零((样本,2))
点[0]=np.random.choice(X),np.random.choice(Y)
i=1
而我<样本:
#得到一个测试点
point=np.array((np.random.choice(X),np.random.choice(Y)))
#检查到现有点的最小距离
如果np.min(np.sum(np.square(点[:i]-点),1))>dmin2:
点[i]=点
i+=1
Ohh,我明白了。太好了!非常感谢!我对第一个选项仍然有问题,但是,使用你的第二个想法,一切都变得更好了!@Enrique我刚刚注意到代码中有一个小错误——你需要对dmin进行平方运算,因为比较的左侧是计算距离的平方。这比t更有效每次计算平方根。