【问题标题】:nested for loops in python3: produce an output of two for loopspython3中的嵌套for循环:产生两个for循环的输出
【发布时间】:2020-04-18 11:09:36
【问题描述】:

我有这个代码

import numpy as np
import pandas as pd
from scipy.spatial import distance
mn= [(252, 468), (252, 495), (274, 481), (280, 458), (298, 479), (301, 458), (324, 499)]
name=['loc1','loc2','loc3','loc4','loc5','lco6','loc7']

zz= [(329, 478), (336, 455), (346, 499), (352, 478), (374, 468), (381, 499), (395, 459), (406, 488)]

L = pd.Series()
for name, i in list(zip(name, mn)):
    for e in zz:
        L[name] = distance.euclidean(e, i)
print(L)

w=100
dd = np.sqrt(np.power(L, 2) + np.power(w, 2))
print(dd)

这是它作为 L & dd 的输出:

loc1    155.293271
loc2    154.159009
loc3    132.185476
loc4    129.522199
loc5    108.374351
lco6    109.201648
loc7     82.734515
dtype: float64
loc1    184.705170
loc2    183.752551
loc3    165.749811
loc4    163.633737
loc5    147.461859
lco6    148.070929
loc7    129.788289

我的麻烦是它只为 zz 中的一个点提供 L&dd,但我希望为 zz 中的每个点提供 L,然后能够使用它为 L 中的每个值获取 dd。

感谢您的帮助!

【问题讨论】:

    标签: python python-3.x loops for-loop nested-loops


    【解决方案1】:

    你快到了。基本上你可以用这个替换你的 for 循环:

    L = pd.Series()
    for name, i in list(zip(name, mn)):
        j = [] # save the intermediary results here
        for e in zz:
            j.append(distance.euclidean(e, i)) 
        L[name] = j # append at once all computations are done
    

    这会给你这样的东西:

    loc1    [77.64663547121665, 85.0, 98.97979591815695, 1...
    loc2    [78.85429601486528, 93.03762679690406, 94.0850...
    loc3    [55.08175741568164, 67.23094525588644, 74.2159...
    loc4    [52.92447448959697, 56.08029957123981, 77.6981...
    loc5    [31.016124838541646, 44.94441010848846, 52.0, ...
    lco6    [34.40930106817051, 35.12833614050059, 60.8769...
    loc7    [21.587033144922902, 45.60701700396552, 22.0, ...
    

    下一步,你可以使用.apply函数:

    op = (L
         .apply(lambda x: np.sqrt(np.power(x, 2) + np.power(w, 2)))
         .apply(lambda x: x[0])) # get the first value of each array
    
    loc1    126.605687
    loc2    127.349912
    loc3    114.166545
    loc4    113.141504
    loc5    104.699570
    lco6    105.754433
    loc7    102.303470
    dtype: float64
    

    【讨论】:

    • 谢谢 :) 并且对于下一个操作,我这样做了 o = [] for row in L: o.append(np.sqrt(np.power(row, 2) + np. power(w, 2))) dd = o 它给出 [array([126.60568708, 131.24404748, ........]), array([127.34991166, 136.58696863, ........]) 所以,有没有办法调用 dd 的第一列?谢谢!
    • 我做了,但我还是一个新成员,我应该达到15才能标记它。他们会在我 15 岁之前注册我的标记
    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多