对于大于1的值,未获得完全浮点除法。在python 3.6.2中

2024-05-06 07:58:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用一些值填充np.zeros2d数组,然后用每行中的最大值规范化这些值

我使用max()函数将该行的每个值除以最大值。虽然我对数组中的值进行了适当的浮点除法,直到最大值为止,但Python只对数组中最大值之后的值返回1.

在这种情况下,我怎样才能得到正确的值

我将Python3.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.]

Tags: inimportl1forlenifasnp
1条回答
网友
1楼 · 发布于 2024-05-06 07:58:11

感谢user2357112supportsMonica和mkrieger1,我在代码中发现了错误。“最大值”随着循环对数组的编辑而更改。解决方案是通过如下更改代码来实现的:

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')

相关问题 更多 >