【问题标题】:Variable Explorer Spyder变量浏览器 Spyder
【发布时间】:2016-10-14 02:24:55
【问题描述】:

我的以下代码绝对正确,我什至得到了输出,但是 centroids_listoflists 没有出现在变量资源管理器中,我也无法通过 print(centroids_listoflists) 回忆它。

import numpy as np

data = np.random.choice(2,size=(10, 5))
centroids=data[np.random.choice(data.shape[0], 2)]
#We have random binary data; here 10 observation vectors with length 5
#Out of these data we choose randomly 2 centroids to work with
print ("Here are the centroids:")
print (centroids)
print ("Here is the data:")
print (data)

distance_array =np.full((data.shape[0],2),data.shape[1])
distance_array[:,1]=0
distance_array=distance_array.astype(np.int)

#determine the hamming distance to each centroid and save the smallest one

def compare(centroids,data):
    for a in range(data.shape[0]):
        for b in range(centroids.shape[0]):
            distance = 0
            for i in range(data.shape[1]):
                if (data[a][i] != centroids[b][i]):
                    distance +=1
                else:
                    distance +=0
            if (distance <= distance_array[a,0]):
                distance_array[a,0] = distance
                distance_array[a,1] = b
            else:
                pass

compare(centroids,data)

print ("Here are the distances:")
print (distance_array)

#create a LookupTable which tells me which centroid contains which vectors and with what distance

def create_centroids_listoflists(data,distance_array,centroids):
    centroids_listoflists = [ [] for i in range(centroids.shape[0])]
    for a in range(len(centroids_listoflists)):
        for b in range(len(distance_array)):
            if (a == distance_array[b,1]):
                centroids_listoflists[a].append((distance_array[b,1],data[b]))
            else:
                pass
    print(centroids_listoflists)

print ("LookupTable for centroid,data and distance:")            
create_centroids_listoflists(data,distance_array,centroids)

如果你能告诉我为什么它不起作用,我会很高兴...... 我认为函数create_centroids_listoflists的定义部分有问题。

谢谢!

【问题讨论】:

    标签: listview python-3.x variables numpy


    【解决方案1】:

    我不知道为什么,但是如果您在函数内部创建一个变量,它将是一个局部变量,因此您以后无法调用它。我通过在输入定义的函数之前初始化列表(或变量)解决了这个问题。然后将其保存为全局变量,也可以在变量资源管理器中使用。

    最好的问候和感谢您的帮助。

    【讨论】:

      【解决方案2】:

      变量是在函数内部创建的,在函数外部不存在。您应该使用 return 语句将其发送到您的函数之外:

      def create_centroids_listoflists(data,distance_array,centroids):
          centroids_listoflists = [ [] for i in range(centroids.shape[0])]
          for a in range(len(centroids_listoflists)):
              for b in range(len(distance_array)):
                  if (a == distance_array[b,1]):
                      centroids_listoflists[a].append((distance_array[b,1],data[b]))
                  else:
                      pass
          return centroids_listoflists
      
      print ("LookupTable for centroid,data and distance:")            
      centroids_listoflists = create_centroids_listoflists(data,distance_array,centroids)
      print(centroids_listoflists)
      

      注意centroids_listoflists在函数内部和外部不是同一个变量,但它被设置为相同的值(列表的列表)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多