RunTimeWarning: недопустимое значение в true_divide в цикле - PullRequest
0 голосов
/ 14 июля 2020

В моем коде после того, как я добавил последние 3 строки, происходит RunTimeWarning: Invalid value, обнаруженный в true_divide, я не знаю, что должен делать, строки, которые я добавляю, не имеют деления 0, все значения > 0.

import pandas as pd

import numpy as np

from sklearn import preprocessing

from scipy.spatial.distance import pdist, squareform



data = pd.read_csv('mfeat-fac.txt', delimiter= '\s+', header=None, index_col=False)

df = pd.DataFrame(data)

min_max_scaler = preprocessing.MinMaxScaler()

np_scaled = min_max_scaler.fit_transform(df)

df_normalized = pd.DataFrame(np_scaled)

df_normalized = df_normalized.values

distancias = pdist(df_normalized, metric='euclidean')

distancias = squareform(distancias)   #Matriz de dissimilaridades

m=1.6    #Coeficiente de fuzzificação

p=1      #Numero de matrizes simultanes

n=2000   #Numero de elementos

T=150   #Limite de iterações

K=10   #Num de grupos

er=10**-10  #Erro

coef= 1/(m-1)


Gp = np.random.rand(K,n)   #linhas = grupos; colunas = objeto

Gp2 = Gp/Gp.sum(axis=0,keepdims=1)   #Matriz de grau de pertinencia; somatorio nos grupos =1


alfa = np.zeros((K,p), dtype=np.float64)


alfa[0:K, 0:p] = 1.0          #Matriz inicial de pesos (para matriz unica, não muda nada)


argumento = np.zeros((K,n), dtype=np.float64)  #Matriz inicial dos argumentos 

proto = np.zeros((K,1), dtype=np.uint16)  #Matriz inicial dos protótipos

sumdist= np.zeros((n,1), dtype=np.float64) #Matriz inicial para somatorio das dist do objeto a cada repre dos grupos

for k in range(K):

    for h in range(n):

        for i in range(n):

            for j in range(p):

             argumento[k,h] = argumento[k,h]+(Gp2[k,i]**m)*(alfa[k,j]*distancias[i,h])

             proto[k] = np.argmin(argumento[k])        

             for t in range(K):

              sumdist[i]=sumdist[i]+distancias[i,proto[t]]

              Gp2[k,i] = 1/((distancias[i,proto[k]]/sumdist[i])**coef)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...