Понимание ошибки типа или ошибки индексации с матрицами - PullRequest
1 голос
/ 28 мая 2020

Привет, у меня проблема с созданием матриц и циклов с матрицами. Есть координаты, и я хочу рассчитать расстояния по этим координатам. но я всегда вижу ошибку типа error или ошибку индексации, пожалуйста, помогите.

Вот код:

import numpy as np
coord=[]
coord = np.array([[31, 22, 52],
       [37, 37, 69],
       [32, 38, 46],
       [33, 13, 10],
       [13, 61, 33],
       [35, 62, 63],
       [36, 63, 69],
       [37, 32, 22],
       [22, 15, 35],
       [39, 59, 15],
       [40, 5, 6],
       [41, 10, 17],
       [42, 21, 10],
       [43, 5, 64],
       [44, 30, 15],
       [45, 39, 10],
       [46, 32, 39],
       [47, 25, 32],
       [48, 25, 55],
       [49, 48, 28],
       [50, 56, 37],
       [51, 30, 13]])
city=len(coord)
best_solution=[]
best_fitness=100000000
pop_size=1000  
CR=0.8 # %YÜZDE 90 OLASILIKLA CAPRAZLANIYOR.
MR=0.5
MaxIter=5000

distance=[]

for i in range(city-1):
    for j in range(city-1):
          distance[i,j]=np.sqrt((coord[i,1]-coord[j,1])**2+(coord[i,2]-coord[j,2])**2)
          # distance[i][j]=np.sqrt((coord[i-1][1]-coord[j-1][1])**2+coord[i-1][2]-coord[j-1][2]**2)

вот простой способ.

distance = np.zeros([city,city])

for i in range(city):
    for j in range(city):
        distance[i][j] = np.sqrt((coord[i][1] - coord[j][1]) ** 2 + (coord[i][2] - coord[j][2]) ** 2)

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Насколько я понимаю из ваших требований, вы хотите создать матрицу расстояний со всеми парами координат. Это должно исправить ваш код.

distance = np.zeros((city, city))

for i in range(city):
    for j in range(city):
        distance[i][j] = np.sqrt((coord[i][1] - coord[j][1]) ** 2 + (coord[i][2] - coord[j][2]) ** 2)

Причина, по которой вы получали ошибки индекса, заключалась в следующем:

  • На вашем кодовом расстоянии изначально пустой список, и вы пытались получить доступ к элемент по несуществующему индексу.
  • И синтаксис для индексации списка / numpy массива был неправильным.

Другой момент, range () в python не включает верхняя граница, поэтому вам не нужно использовать city-1. В математической записи:
диапазон (Y) эквивалентен [0, Y)
диапазон (X, Y) эквивалентен [X, Y)

1 голос
/ 28 мая 2020

Индексы списка не могут иметь форму x, y, но словарь в этом случае подойдет. Списки двойной индексации также должны иметь вид a[x][y], а не a[x, y] (который работает только для словарей, если ключ уже существует).

import numpy as np
coord=[]
coord = np.array([[31, 22, 52],
       [37, 37, 69],
       [32, 38, 46],
       [33, 13, 10],
       [13, 61, 33],
       [35, 62, 63],
       [36, 63, 69],
       [37, 32, 22],
       [22, 15, 35],
       [39, 59, 15],
       [40, 5, 6],
       [41, 10, 17],
       [42, 21, 10],
       [43, 5, 64],
       [44, 30, 15],
       [45, 39, 10],
       [46, 32, 39],
       [47, 25, 32],
       [48, 25, 55],
       [49, 48, 28],
       [50, 56, 37],
       [51, 30, 13]])
city=len(coord)
best_solution=[]
best_fitness=100000000
pop_size=1000  
CR=0.8 # %YÜZDE 90 OLASILIKLA CAPRAZLANIYOR.
MR=0.5
MaxIter=5000

distance = {}

for i in range(city-1):
    for j in range(city-1):
          distance[i, j] = np.sqrt((coord[i][1] - coord[j][1])**2 + (coord[i][2] - coord[j][2])**2)

, который вернет

>>> distance
{(0, 0): 0.0, (0, 1): 22.67156809750927, (0, 2): 17.08800749063506, (0, 3): 42.95346318982906, (0, 4): 43.382023926967726, (0, 5): 41.48493702538308, (0, 6): 44.384682042344295, (0, 7): 31.622776601683793, (0, 8): 18.384776310850235, (0, 9): 52.32590180780452, (0, 10): 49.040799340956916, (0, 11): 37.0, (0, 12): 42.01190307520001, (0, 13): 20.808652046684813, (0, 14): 37.8549864614954, (0, 15): 45.31004303683677, (0, 16): 16.401219466856727, (0, 17): 20.223748416156685, (0, 18): 4.242640687119285, (0, 19): 35.38361202590826, (0, 20): 37.16180835212409, (1, 0): 22.67156809750927, (1, 1): 0.0, (1, 2): 23.021728866442675, (1, 3): 63.694583757176716, (1, 4): 43.266615305567875, (1, 5): 25.709920264364882, (1, 6): 26.0, (1, 7): 47.265209192385896, (1, 8): 40.496913462633174, (1, 9): 58.309518948453004, (1, 10): 70.66116330771806, (1, 11): 58.59180830116101, (1, 12): 61.1310068623117, (1, 13): 32.38826948140329, (1, 14): 54.45181356024793, (1, 15): 59.033888572581766, (1, 16): 30.4138126514911, (1, 17): 38.897300677553446, (1, 18): 18.439088914585774, (1, 19): 42.44997055358225, (1, 20): 37.21558813185679, (2, 0): 17.08800749063506, (2, 1): 23.021728866442675, (2, 2): 0.0, (2, 3): 43.829214001622255, (2, 4): 26.419689627245813, (2, 5): 29.410882339705484, (2, 6): 33.97057550292606, (2, 7): 24.73863375370596, (2, 8): 25.495097567963924, (2, 9): 37.44329045369811, (2, 10): 51.85556864985669, (2, 11): 40.311288741492746, (2, 12): 39.81205847478876, (2, 13): 37.589892258425, (2, 14): 32.01562118716424, (2, 15): 36.013886210738214, (2, 16): 9.219544457292887, (2, 17): 19.1049731745428, (2, 18): 15.811388300841896, (2, 19): 20.591260281974, (2, 20): 20.12461179749811, (3, 0): 42.95346318982906, (3, 1): 63.694583757176716, (3, 2): 43.829214001622255, (3, 3): 0.0, (3, 4): 53.225933528685054, (3, 5): 72.18032973047436, (3, 6): 77.33692520394123, (3, 7): 22.47220505424423, (3, 8): 25.079872407968907, (3, 9): 46.2709412050371, (3, 10): 8.94427190999916, (3, 11): 7.615773105863909, (3, 12): 8.0, (3, 13): 54.589376255824725, (3, 14): 17.72004514666935, (3, 15): 26.0, (3, 16): 34.66987164671943, (3, 17): 25.059928172283335, (3, 18): 46.57252408878007, (3, 19): 39.35733730830886, (3, 20): 50.774009099144415, (4, 0): 43.382023926967726, (4, 1): 43.266615305567875, (4, 2): 26.419689627245813, (4, 3): 53.225933528685054, (4, 4): 0.0, (4, 5): 30.01666203960727, (4, 6): 36.05551275463989, (4, 7): 31.016124838541646, (4, 8): 46.04345773288535, (4, 9): 18.110770276274835, (4, 10): 62.16912416947821, (4, 11): 53.45091205957107, (4, 12): 46.14108798023731, (4, 13): 64.00781202322104, (4, 14): 35.84689665786984, (4, 15): 31.827660925679098, (4, 16): 29.614185789921695, (4, 17): 36.013886210738214, (4, 18): 42.190046219457976, (4, 19): 13.92838827718412, (4, 20): 6.4031242374328485, (5, 0): 41.48493702538308, (5, 1): 25.709920264364882, (5, 2): 29.410882339705484, (5, 3): 72.18032973047436, (5, 4): 30.01666203960727, (5, 5): 0.0, (5, 6): 6.082762530298219, (5, 7): 50.80354318352215, (5, 8): 54.70831746635972, (5, 9): 48.093658625644196, (5, 10): 80.61017305526642, (5, 11): 69.42621983083913, (5, 12): 67.00746227100382, (5, 13): 57.0087712549569, (5, 14): 57.688820407423826, (5, 15): 57.77542730261716, (5, 16): 38.41874542459709, (5, 17): 48.27007354458868, (5, 18): 37.8549864614954, (5, 19): 37.69615364994153, (5, 20): 26.68332812825267, (6, 0): 44.384682042344295, (6, 1): 26.0, (6, 2): 33.97057550292606, (6, 3): 77.33692520394123, (6, 4): 36.05551275463989, (6, 5): 6.082762530298219, (6, 6): 0.0, (6, 7): 56.302753041036986, (6, 8): 58.82176467941097, (6, 9): 54.147945482723536, (6, 10): 85.63293758829018, (6, 11): 74.24957912338628, (6, 12): 72.42237223399962, (6, 13): 58.215118311311535, (6, 14): 63.28506932918696, (6, 15): 63.694583757176716, (6, 16): 43.139309220245984, (6, 17): 53.03772242470448, (6, 18): 40.496913462633174, (6, 19): 43.657759905886145, (6, 20): 32.7566787083184, (7, 0): 31.622776601683793, (7, 1): 47.265209192385896, (7, 2): 24.73863375370596, (7, 3): 22.47220505424423, (7, 4): 31.016124838541646, (7, 5): 50.80354318352215, (7, 6): 56.302753041036986, (7, 7): 0.0, (7, 8): 21.400934559032695, (7, 9): 27.892651361962706, (7, 10): 31.38470965295043, (7, 11): 22.561028345356956, (7, 12): 16.278820596099706, (7, 13): 49.92995093127971, (7, 14): 7.280109889280518, (7, 15): 13.892443989449804, (7, 16): 17.0, (7, 17): 12.206555615733702, (7, 18): 33.734255586866, (7, 19): 17.08800749063506, (7, 20): 28.30194339616981, (8, 0): 18.384776310850235, (8, 1): 40.496913462633174, (8, 2): 25.495097567963924, (8, 3): 25.079872407968907, (8, 4): 46.04345773288535, (8, 5): 54.70831746635972, (8, 6): 58.82176467941097, (8, 7): 21.400934559032695, (8, 8): 0.0, (8, 9): 48.33218389437829, (8, 10): 30.675723300355934, (8, 11): 18.681541692269406, (8, 12): 25.709920264364882, (8, 13): 30.675723300355934, (8, 14): 25.0, (8, 15): 34.655446902326915, (8, 16): 17.46424919657298, (8, 17): 10.44030650891055, (8, 18): 22.360679774997898, (8, 19): 33.734255586866, (8, 20): 41.048751503547585, (9, 0): 52.32590180780452, (9, 1): 58.309518948453004, (9, 2): 37.44329045369811, (9, 3): 46.2709412050371, (9, 4): 18.110770276274835, (9, 5): 48.093658625644196, (9, 6): 54.147945482723536, (9, 7): 27.892651361962706, (9, 8): 48.33218389437829, (9, 9): 0.0, (9, 10): 54.74486277268398, (9, 11): 49.040799340956916, (9, 12): 38.3275357934736, (9, 13): 72.91776189653656, (9, 14): 29.0, (9, 15): 20.615528128088304, (9, 16): 36.124783736376884, (9, 17): 38.01315561749642, (9, 18): 52.49761899362675, (9, 19): 17.029386365926403, (9, 20): 22.20360331117452, (10, 0): 49.040799340956916, (10, 1): 70.66116330771806, (10, 2): 51.85556864985669, (10, 3): 8.94427190999916, (10, 4): 62.16912416947821, (10, 5): 80.61017305526642, (10, 6): 85.63293758829018, (10, 7): 31.38470965295043, (10, 8): 30.675723300355934, (10, 9): 54.74486277268398, (10, 10): 0.0, (10, 11): 12.083045973594572, (10, 12): 16.492422502470642, (10, 13): 58.0, (10, 14): 26.570660511172846, (10, 15): 34.23448553724738, (10, 16): 42.638011210655684, (10, 17): 32.802438933713454, (10, 18): 52.92447448959697, (10, 19): 48.30113870293329, (10, 20): 59.682493245507096, (11, 0): 37.0, (11, 1): 58.59180830116101, (11, 2): 40.311288741492746, (11, 3): 7.615773105863909, (11, 4): 53.45091205957107, (11, 5): 69.42621983083913, (11, 6): 74.24957912338628, (11, 7): 22.561028345356956, (11, 8): 18.681541692269406, (11, 9): 49.040799340956916, (11, 10): 12.083045973594572, (11, 11): 0.0, (11, 12): 13.038404810405298, (11, 13): 47.265209192385896, (11, 14): 20.09975124224178, (11, 15): 29.832867780352597, (11, 16): 31.11269837220809, (11, 17): 21.213203435596427, (11, 18): 40.85339643163099, (11, 19): 39.56008088970496, (11, 20): 50.15974481593781, (12, 0): 42.01190307520001, (12, 1): 61.1310068623117, (12, 2): 39.81205847478876, (12, 3): 8.0, (12, 4): 46.14108798023731, (12, 5): 67.00746227100382, (12, 6): 72.42237223399962, (12, 7): 16.278820596099706, (12, 8): 25.709920264364882, (12, 9): 38.3275357934736, (12, 10): 16.492422502470642, (12, 11): 13.038404810405298, (12, 12): 0.0, (12, 13): 56.32051136131489, (12, 14): 10.295630140987, (12, 15): 18.0, (12, 16): 31.016124838541646, (12, 17): 22.360679774997898, (12, 18): 45.17742799230607, (12, 19): 32.449961479175904, (12, 20): 44.204072210600685, (13, 0): 20.808652046684813, (13, 1): 32.38826948140329, (13, 2): 37.589892258425, (13, 3): 54.589376255824725, (13, 4): 64.00781202322104, (13, 5): 57.0087712549569, (13, 6): 58.215118311311535, (13, 7): 49.92995093127971, (13, 8): 30.675723300355934, (13, 9): 72.91776189653656, (13, 10): 58.0, (13, 11): 47.265209192385896, (13, 12): 56.32051136131489, (13, 13): 0.0, (13, 14): 55.00909015790027, (13, 15): 63.812224534175265, (13, 16): 36.796738985948195, (13, 17): 37.73592452822641, (13, 18): 21.93171219946131, (13, 19): 56.08029957123981, (13, 20): 57.706152185014034, (14, 0): 37.8549864614954, (14, 1): 54.45181356024793, (14, 2): 32.01562118716424, (14, 3): 17.72004514666935, (14, 4): 35.84689665786984, (14, 5): 57.688820407423826, (14, 6): 63.28506932918696, (14, 7): 7.280109889280518, (14, 8): 25.0, (14, 9): 29.0, (14, 10): 26.570660511172846, (14, 11): 20.09975124224178, (14, 12): 10.295630140987, (14, 13): 55.00909015790027, (14, 14): 0.0, (14, 15): 10.295630140987, (14, 16): 24.08318915758459, (14, 17): 17.72004514666935, (14, 18): 40.311288741492746, (14, 19): 22.20360331117452, (14, 20): 34.058772731852805, (15, 0): 45.31004303683677, (15, 1): 59.033888572581766, (15, 2): 36.013886210738214, (15, 3): 26.0, (15, 4): 31.827660925679098, (15, 5): 57.77542730261716, (15, 6): 63.694583757176716, (15, 7): 13.892443989449804, (15, 8): 34.655446902326915, (15, 9): 20.615528128088304, (15, 10): 34.23448553724738, (15, 11): 29.832867780352597, (15, 12): 18.0, (15, 13): 63.812224534175265, (15, 14): 10.295630140987, (15, 15): 0.0, (15, 16): 29.832867780352597, (15, 17): 26.076809620810597, (15, 18): 47.12748667179272, (15, 19): 20.12461179749811, (15, 20): 31.906112267087632, (16, 0): 16.401219466856727, (16, 1): 30.4138126514911, (16, 2): 9.219544457292887, (16, 3): 34.66987164671943, (16, 4): 29.614185789921695, (16, 5): 38.41874542459709, (16, 6): 43.139309220245984, (16, 7): 17.0, (16, 8): 17.46424919657298, (16, 9): 36.124783736376884, (16, 10): 42.638011210655684, (16, 11): 31.11269837220809, (16, 12): 31.016124838541646, (16, 13): 36.796738985948195, (16, 14): 24.08318915758459, (16, 15): 29.832867780352597, (16, 16): 0.0, (16, 17): 9.899494936611665, (16, 18): 17.46424919657298, (16, 19): 19.4164878389476, (16, 20): 24.08318915758459, (17, 0): 20.223748416156685, (17, 1): 38.897300677553446, (17, 2): 19.1049731745428, (17, 3): 25.059928172283335, (17, 4): 36.013886210738214, (17, 5): 48.27007354458868, (17, 6): 53.03772242470448, (17, 7): 12.206555615733702, (17, 8): 10.44030650891055, (17, 9): 38.01315561749642, (17, 10): 32.802438933713454, (17, 11): 21.213203435596427, (17, 12): 22.360679774997898, (17, 13): 37.73592452822641, (17, 14): 17.72004514666935, (17, 15): 26.076809620810597, (17, 16): 9.899494936611665, (17, 17): 0.0, (17, 18): 23.0, (17, 19): 23.345235059857504, (17, 20): 31.400636936215164, (18, 0): 4.242640687119285, (18, 1): 18.439088914585774, (18, 2): 15.811388300841896, (18, 3): 46.57252408878007, (18, 4): 42.190046219457976, (18, 5): 37.8549864614954, (18, 6): 40.496913462633174, (18, 7): 33.734255586866, (18, 8): 22.360679774997898, (18, 9): 52.49761899362675, (18, 10): 52.92447448959697, (18, 11): 40.85339643163099, (18, 12): 45.17742799230607, (18, 13): 21.93171219946131, (18, 14): 40.311288741492746, (18, 15): 47.12748667179272, (18, 16): 17.46424919657298, (18, 17): 23.0, (18, 18): 0.0, (18, 19): 35.4682957019364, (18, 20): 35.84689665786984, (19, 0): 35.38361202590826, (19, 1): 42.44997055358225, (19, 2): 20.591260281974, (19, 3): 39.35733730830886, (19, 4): 13.92838827718412, (19, 5): 37.69615364994153, (19, 6): 43.657759905886145, (19, 7): 17.08800749063506, (19, 8): 33.734255586866, (19, 9): 17.029386365926403, (19, 10): 48.30113870293329, (19, 11): 39.56008088970496, (19, 12): 32.449961479175904, (19, 13): 56.08029957123981, (19, 14): 22.20360331117452, (19, 15): 20.12461179749811, (19, 16): 19.4164878389476, (19, 17): 23.345235059857504, (19, 18): 35.4682957019364, (19, 19): 0.0, (19, 20): 12.041594578792296, (20, 0): 37.16180835212409, (20, 1): 37.21558813185679, (20, 2): 20.12461179749811, (20, 3): 50.774009099144415, (20, 4): 6.4031242374328485, (20, 5): 26.68332812825267, (20, 6): 32.7566787083184, (20, 7): 28.30194339616981, (20, 8): 41.048751503547585, (20, 9): 22.20360331117452, (20, 10): 59.682493245507096, (20, 11): 50.15974481593781, (20, 12): 44.204072210600685, (20, 13): 57.706152185014034, (20, 14): 34.058772731852805, (20, 15): 31.906112267087632, (20, 16): 24.08318915758459, (20, 17): 31.400636936215164, (20, 18): 35.84689665786984, (20, 19): 12.041594578792296, (20, 20): 0.0}

Вот версия матрицы:

import numpy as np
coord=[]
coord = np.array([[31, 22, 52],
       [37, 37, 69],
       [32, 38, 46],
       [33, 13, 10],
       [13, 61, 33],
       [35, 62, 63],
       [36, 63, 69],
       [37, 32, 22],
       [22, 15, 35],
       [39, 59, 15],
       [40, 5, 6],
       [41, 10, 17],
       [42, 21, 10],
       [43, 5, 64],
       [44, 30, 15],
       [45, 39, 10],
       [46, 32, 39],
       [47, 25, 32],
       [48, 25, 55],
       [49, 48, 28],
       [50, 56, 37],
       [51, 30, 13]])
city=len(coord)
best_solution=[]
best_fitness=100000000
pop_size=1000  
CR=0.8 # %YÜZDE 90 OLASILIKLA CAPRAZLANIYOR.
MR=0.5
MaxIter=5000

distance = [ [ None for i in range(city-1) ] for i in range(city-1) ]

for i in range(city-1):
    for j in range(city-1):
          distance[i][j] = np.sqrt(
              (coord[i][1] - coord[j][1])**2 + (coord[i][2] - coord[j][2])**2)

distance = np.array(distance)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...