需要遍历每一列并找到最大值和最小值

时间:2015-06-25 15:00:26

标签: python numpy normalization elements

import numpy as np

x = np.loadtxt('xdata.txt', dtype=float)
y = np.loadtxt('ydata.txt', dtype=float)

normalX = []
normalY = []

for column in x:
    i = 0
    while i <=17:
        xmax = max(column[i])
        xmin = min(column[i])
        normalx = (?-xmin)/(xmax-xmin)
        normalX.append(normalx)
        i += 1
    else:
        break

我有一个148 x 17矩阵,我导入,我想规范化数据。我试图遍历每一列并找到max和min但是我的代码到目前为止导致“TypeError:'numpy.float64'对象不可迭代”。 还应该怎么做?如果我想让它成为专栏中的元素。

而不是一个大的148x17矩阵,而不是4x4。

1.61  125  13   933.57 
1.95  135  29   1357.77 
1.91  135  28   1728 
2.2   137  46   1828.05 

第一列最大值为2.2,min = 1.61等。

1 个答案:

答案 0 :(得分:0)

在您的代码中,您首先访问for columns in x这会导致columns成为x中的row,然后在您尝试访问的for循环内columns[i] },这将返回该行中i位置的元素。

您可以使用np.amax(x, axis=0)获取每列的最大值,这将返回每列的最大列表。

同样,您也可以使用np.amin(x, axis=0)

另一个问题是,如果您的矩阵大小为148x17,则在while循环中,您应该只检查i<17而不是i<=17。您也可以将enumerate(column)for循环相同,语法为 - for i, val in enumerate(column)

另外,我猜你需要规范化所有的值,所以你需要在第一个for循环中创建一个列表并继续插入该列表,然后在最后,将该列表添加到normalX

示例代码 -

xmax = np.amax(x, axis=0)
xmin = np.amin(x, axis=0)

for column in x:
    tnormalX = []
    for i, val in enumerate(column):
        normalx = (val-xmin[i])/(xmax[i]-xmin[i])
        tnormalX.append(normalx)
        i += 1
    normalX.append(tnormalX)