2016-06-15 8 views
0

私は時々Memory Errorに直面してい扱う、時にはそれが罰金を通過し、時にはそれが...具体的にポップアップ表示されます。私はこの減算を行うには多くの方法を試してみました?、これを避けるためにどのような方法があると私の他のコードの一部であることも、いつか、このエラーが発生します避け「メモリエラー」大規模アレイ

ここに私のコードです:?

def home(request): 
    if request.method=="POST": 
     img = UploadForm(request.POST, request.FILES) 
     no_clus = int(request.POST.get('num_clusters', 10)) 
     if img.is_valid(): 

      paramFile =io.TextIOWrapper(request.FILES['pic'].file) 
      portfolio1 = csv.DictReader(paramFile) 

      users = [] 

      users = [row["BASE_NAME"] for row in portfolio1] 
      print(len(users)) 

      my_list = users 
      vectorizer = CountVectorizer() 
      dtm = vectorizer.fit_transform(my_list) 

      lsa = TruncatedSVD(n_components=100) 
      dtm_lsa = lsa.fit_transform(dtm) 
      dtm_lsa = Normalizer(copy=False).fit_transform(dtm_lsa) 
      dist1 = (1- np.asarray(numpy.asmatrix(dtm_lsa) * numpy.asmatrix(dtm_lsa).T)) 
      # print(1-similarity) 
      k = len(my_list) 
     # dist1 = (1- similarity) 
      # dist1=similarity 
      # dist1.astype(float) 
      #print(dist1) 
      # print(cosine_similarity(tfidf_matrix[3:4], tfidf_matrix)) 
      # float dist = 1 - similarity; 
      data2 = np.asarray(dist1) 
      arr_3d = data2.reshape((1, k, k)) 
      # arr_3d= 1- arr_3d 
      #print(arr_3d) 

      no_cluster = number_cluster(len(my_list)) 
      print(no_cluster) 
      for i in range(len(arr_3d)): 
       # print (i+1910) 
       # km = AgglomerativeClustering(n_clusters=no_clus, linkage='ward').fit(arr_3d[i]) 
       km = AgglomerativeClustering(n_clusters=no_cluster, linkage='average').fit(arr_3d[i]) 
       # km = AgglomerativeClustering(n_clusters=no_clus, linkage='complete').fit(arr_3d[i]) 
       # km = MeanShift() 
       # km = KMeans(n_clusters=no_clus, init='k-means++') 
       # km = MeanShift() 
       # km = km.fit(arr_3d[i]) 
       # print km 
       labels = km.labels_ 

      csvfile = settings.MEDIA_ROOT +'\\'+ 'images\\export.csv' 

      csv_input = pd.read_csv(csvfile, encoding='latin-1') 
      csv_input['cluster_ID'] = labels 
      csv_input['BASE_NAME'] = my_list 
      csv_input.to_csv(settings.MEDIA_ROOT +'/'+ 'output.csv', index=False) 
      clus_groups = list() 
      for j in range(no_cluster): 
       # print(" cluster no %i:%s" % (j, [my_list[i] for i, x in enumerate(labels) if x == j])) 
       list_of_ints = ([my_list[i] for i, x in enumerate(labels) if x == j]) 
       clus_groups.append(' '.join(list_of_ints)) 
      vectorizer = CountVectorizer() 
      dtm = vectorizer.fit_transform(my_list) 

      lsa = TruncatedSVD(n_components=100) 
      dtm_lsa = lsa.fit_transform(dtm) 
      dtm_lsa = Normalizer(copy=False).fit_transform(dtm_lsa) 
      dist1 = (1 - np.asarray(numpy.asmatrix(dtm_lsa) * numpy.asmatrix(dtm_lsa).T)) 
      # similarity = np.asarray(numpy.asmatrix(dtm_lsa) * numpy.asmatrix(dtm_lsa).T) 
      k = len(my_list) 
      # dist1 = 1 - similarity 

      data2 = np.asarray(dist1) 
      arr_3d = data2.reshape((1, k, k)) 
      # arr_3d= 1- arr_3d 

      #no_clus = 5 
      # no_clus=get_name(request) 
      for i in range(len(arr_3d)): 
       # print (i+1910) 
       # km = AgglomerativeClustering(n_clusters=no_clus, linkage='ward').fit(arr_3d[i]) 
       # km = AgglomerativeClustering(n_clusters=no_clus, linkage='average').fit(arr_3d[i]) 
       # km = AgglomerativeClustering(n_clusters=no_clus, linkage='complete').fit(arr_3d[i]) 
       km = KMeans(n_clusters=no_clus, init='k-means++') 
       km = km.fit(arr_3d[i]) 
       # print km 
       labels2 = km.labels_ 
       # error = km.inertia_ 
       print(labels2) 

      labels = labels.tolist() 
      labels2 = labels2.tolist() 
      # new=list() 


      csv_input = pd.read_csv(settings.MEDIA_ROOT +'/'+ 'output.csv',encoding='latin-1') 
      labels1 = csv_input['cluster_ID'] 
      new_list = [] 
      for k in labels1: 
       new_list.append(labels2[k]) # lookup the value in list2 at the index given by list1 

      print(new_list) 
      print(len(new_list)) 
      csv_input = pd.read_csv(settings.MEDIA_ROOT +'/'+ 'output.csv',encoding='latin-1') 
      csv_input['cluster_ID'] = labels 
      csv_input['BASE_NAME'] = my_list 
      csv_input['User_Map'] = new_list 
      csv_input.to_csv(settings.MEDIA_ROOT + '/' + 'output1.csv', index=False) 
      #filename= settings.MEDIA_ROOT +'/'+ 'output.csv' 
      send_file(request) 
      # my_list = portfolio 
      #save_file('output1.csv') 
      # csv(request) 
      # return HttpResponseRedirect(reverse('labels')) 
      return render(request, 'new.html', {'labels': labels}) 
    else: 
     img=UploadForm() 
    images=Upload.objects.all() 
    return render(request,'new.html',{'form':img,'images':images}) 

dist1 = (1- np.asarray(numpy.asmatrix(dtm_lsa) * numpy.asmatrix(dtm_lsa).T))をやろうとしたときにerrorがある..私はまた、同じサイズのすべてのものを含む新しい配列を作成しようとしましたが、それを引きます。このエラー?このコードを実行するユーザーインターフェイスはどのPCでも操作できます。いくつかのメモリを割り当て関数呼び出しである

+0

あなたが「shouldn:

私はそれらの線でラインを交換することをお勧めすべて1の持つ配列を作成する必要がトン、あなただけ行うことができる必要があります: 'new_array = my_arrayで - 1 ' – reptilicus

+0

は、まあ、私は1 - my_arrayでを望んでいた、そしてそれは私が私の悪いもともと – Lelo

+0

をやってんだよ、私はちょうどことを見ました。マトリックスにキャストするのではなく、単に配列を使うのはなぜですか?私は内部については分かりませんが、おそらくデータのコピーがそこで起こっています。それらを配列として保持し、 'np.dot(dtm_lsa、dtm_lsa.T)'を使用しますか? – reptilicus

答えて

0
わからない

が、incriminatedラインで使用numpy.asmatrix(dtm_lsa)、。それは二回、あまりにも多くのメモリを作成するよう

あなたはそれを2回やっている(それは、ガベージコレクションのですが、それはいくつかのケースでは手遅れになる前に、それはだ)

(すべてであなたを愛用していない:それは数式で一般的なトラップですこれらの公式は、コンピュータにプログラムされたときに適応されなければならない)。一行で

temp_matrix = numpy.asmatrix(dtm_lsa) 
product = temp_matrix * temp_matrix.T 
# maybe call the garbage collector at this point: gc.collect() 
dist1 = (1- np.asarray(product)) 

そのように1)以下のコピー/ペースト、大きな行列の割り当ての2)ではない多くの

+0

良い点が、それは任意のメモリエラーを回避すると思いますか?なぜこのエラーが発生していますか?それは私のPCが8 GBだからです – Lelo

+0

まだエラーが返されます – Lelo

+0

あなたのデータによって異なります。ああ、私はtemp_matrix.Tがtemp_matrixの転置であると仮定します。だから、あなたは記憶にたくさんのものを持っています。私の答えを編集させてください。 –

関連する問題