Не получается полное деление с плавающей запятой для значений выше 1. в python 3.6.2 - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь заполнить массив np.zeros 2d некоторыми значениями, а затем нормализовать эти значения с максимальным значением в каждой строке.

Я делю каждое значение этой строки на максимальное значение, используя max() функция. Хотя я получаю правильное деление с плавающей запятой для значений в массиве вплоть до максимального значения, Python возвращает только 1. для значений после максимального значения в массиве.

Как можно получить правильные значения в этот случай?

Я использую Python 3.6.2 с ноутбуком Jupyter.

 import numpy as np
 from matplotlib import pyplot as plt
 np.set_printoptions(threshold=np.inf) #for printing full array

 l1 = np.zeros((5,10))
 l2 = np.arange(500)

 for j in range(len(l1[:,0])):
  for i in range(len(l1[0,:])):
    if i<(j+(len(l1[0,:])/2)):
        l1[j,i] = l1[j,i-1]+1
    if i>(j+(len(l1[0,:])/2)-1):
        l1[j,i] = l1[j,i-1]-1


for j in range(len(l1[:,0])):
 for i in range(len(l1[0,:])):
    l1[j,i] = l1[j,i]/(max(l1[j,:]))

fig,ax = plt.subplots(figsize = (5,25))
ax.imshow(l1)
ax.set_aspect('5')

print(l1[0,:])

Результат, который я получаю:

[0.2 0.4 0.6 0.8 1.  1.  1.  1.  1.  0. ]

Массив без нормализации :

[1. 2. 3. 4. 5. 4. 3. 2. 1. 0.]

1 Ответ

2 голосов
/ 22 февраля 2020

Благодаря user2357112supportsMonica и mkrieger1 я нашел свою ошибку в коде. Максимальное значение изменялось, поскольку циклы for редактировали массив. Решение этой проблемы было достигнуто путем изменения кода следующим образом:

import numpy as np
from matplotlib import pyplot as plt
np.set_printoptions(threshold=np.inf) #for printing full array

l1 = np.zeros((10,20))
l2 = np.arange(500)

for j in range(len(l1[:,0])):
    for i in range(len(l1[0,:])):
        if i<(j+(len(l1[0,:])/2)):
            l1[j,i] = l1[j,i-1]+1
        if i>(j+(len(l1[0,:])/2)-1):
            l1[j,i] = l1[j,i-1]-1

for j in range(len(l1[:,0])):
    l1[j,:] = l1[j,:]/(max(l1[j,:]))

fig,ax = plt.subplots(figsize = (5,25))
ax.imshow(l1)
ax.set_aspect('1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...