Все двоичные данные 1 в словаре возвращают 0 при делении и, следовательно, возвращают double_scalars при обработке - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь сделать так, чтобы индекс «все 1» в словаре не возвращал 0 при делении, чтобы при обработке он не возвращал double_scalars.

Это для классификатора блока, который определяетРазмеры ящиков основаны на следующих параметрах:

https://imgur.com/a/1eSyM2o (Извините, репутация меньше 10).

Ancho = Ширина

Альт = Высота

Largo = длина

Tamaño de la caja = размер коробки

Chico = маленький

Mediano = средний

Grande = большой

Я выделил только те значения, которые дают мне вывод double_scalar:

import numpy as np
import pandas as pd

dicci = {'W1':[0,1,0,1,1,1],
         'W0':[1,0,1,0,1,1],
         'H0':[1,1,1,1,1,1],
         'L0':[1,1,1,1,1,1],}

df = pd.DataFrame(dicci)

PW10 = df['W1'][df['W1']==0].count()/df['W1'].count()
PW11 = df['W1'][df['W1']==1].count()/df['W1'].count()

PW00 = df['W0'][df['W0']==0].count()/df['W0'].count()
PW01 = df['W0'][df['W0']==1].count()/df['W0'].count()

PH00 = df['H0'][df['H0']==0].count()/df['H0'].count()
PL00 = df['L0'][df['L0']==0].count()/df['L0'].count()
PH01 = df['H0'][df['H0']==1].count()/df['H0'].count()
PL01 = df['L0'][df['L0']==1].count()/df['L0'].count()
print("PW10: ",PW10)
print("PW11: ",PW11)
print("PW00: ",PW00)
print("PW01: ",PW01)
print("PH00: ",PH00)
print("PL00: ",PL00)
print("PH01: ",PH01)
print("PL01: ",PL01)

#W1
#------------------------------------------------------------------------------
#W1,L0
PW10L00 = ((((df['W1'][(df['W1']==0)&(df['L0']==0)].count()/df['L0'].count())**2)/
          (PW10*PL00)))

PW11L00 = ((((df['W1'][(df['W1']==1)&(df['L0']==0)].count()/df['L0'].count())**2)/
          (PW11*PL00)))

PW10L01 = ((((df['W1'][(df['W1']==0)&(df['L0']==1)].count()/df['L0'].count())**2)/
          (PW10*PL01)))

PW11L01 = ((((df['W1'][(df['W1']==1)&(df['L0']==1)].count()/df['L0'].count())**2)/
          (PW11*PL01)))
PW1L0 = PW10L00 + PW11L00 + PW10L01 + PW11L01

#W1,H0
PW10H00 = ((((df['W1'][(df['W1']==0)&(df['H0']==0)].count()/df['H0'].count())**2)/
          (PW10*PH00)))

PW11H00 = ((((df['W1'][(df['W1']==1)&(df['H0']==0)].count()/df['H0'].count())**2)/
          (PW11*PH00)))

PW10H01 = ((((df['W1'][(df['W1']==0)&(df['H0']==1)].count()/df['H0'].count())**2)/
          (PW10*PH01)))

PW11H01 = ((((df['W1'][(df['W1']==1)&(df['H0']==1)].count()/df['H0'].count())**2)/
          (PW11*PH01)))
PW1H0 = PW10H00 + PW11H00 + PW10H01 + PW11H01


#W0
#-------------------------------------------------------------------------------
#W0,L0
PW00L00 = ((((df['W0'][(df['W0']==0)&(df['L0']==0)].count()/df['L0'].count())**2)/
          (PW00*PL00)))

PW01L00 = ((((df['W0'][(df['W0']==1)&(df['L0']==0)].count()/df['L0'].count())**2)/
          (PW01*PL00)))

PW00L01 = ((((df['W0'][(df['W0']==0)&(df['L0']==1)].count()/df['L0'].count())**2)/
          (PW00*PL01)))

PW01L01 = ((((df['W0'][(df['W0']==1)&(df['L0']==1)].count()/df['L0'].count())**2)/
          (PW01*PL01)))
PW0L0 = PW00L00 + PW01L00 + PW00L01 + PW01L01

#W0,H0
PW00H00 = ((((df['W0'][(df['W0']==0)&(df['H0']==0)].count()/df['H0'].count())**2)/
          (PW00*PH00)))

PW01H00 = ((((df['W0'][(df['W0']==1)&(df['H0']==0)].count()/df['H0'].count())**2)/
          (PW01*PH00)))

PW00H01 = ((((df['W0'][(df['W0']==0)&(df['H0']==1)].count()/df['H0'].count())**2)/
          (PW00*PH01)))

PW01H01 = ((((df['W0'][(df['W0']==1)&(df['H0']==1)].count()/df['H0'].count())**2)/
          (PW01*PH01)))
PW0H0 = PW00H00 + PW01H00 + PW00H01 + PW01H01

print(np.isnan(PW1L0))
print(np.isnan(PW0L0))
print(np.isnan(PW1H0))
print(np.isnan(PW0H0))

Я хочу знать, как я могу сделать так, чтобы значения, которые возвращают 0 на первом месте, не округлялись до 0,поэтому после обработки я могу округлить их до 1 или 0 с помощью функции и, таким образом, сначала не иметь дело с double_scalar.

Это вывод кода.

PW10:  0.3333333333333333
PW11:  0.6666666666666666
PW00:  0.3333333333333333
PW01:  0.6666666666666666
PH00:  0.0
PL00:  0.0
PH01:  1.0
PL01:  1.0

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 34
    (PW10*PL00)))
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 37
    (PW11*PL00)))
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 48
    (PW10*PH00)))
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 51
    (PW11*PH00)))
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 65
    (PW00*PL00)))
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 68
    (PW01*PL00)))
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 79
    (PW00*PH00)))
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\Users\USER\Desktop\MAtl\H00&L00.py", line 82
    (PW01*PH00)))
RuntimeWarning: invalid value encountered in double_scalars
True
True
True
True

Я пыталсяреализовать функцию в первую очередь, где, если любой из первых параметров дает мне 0 'тогда они просто равны 1, но я не уверен, что это правильное решение в долгосрочной перспективе.

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