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等。
答案 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)