【问题标题】:Need to iterate through each column and find max and min需要遍历每一列并找到最大值和最小值
【发布时间】:2015-09-12 06:34:40
【问题描述】:
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 的矩阵要导入,我想对数据进行规范化。我正在尝试遍历每一列并找到最大值和最小值,但到目前为止我的代码导致“TypeError:'numpy.float64'对象不可迭代”。 还有什么应该?如果我想让它成为列中的元素。

用 4x4 代替大的 148x17 矩阵。

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,最小值 = 1.61 等等。

【问题讨论】:

  • 你能用示例输入数据更新问题吗?
  • 我编辑后似乎无法保持原始矩阵格式...
  • 你不能用np.amax(a, axis=1)吗?
  • 我会快速搜索一下。
  • 尝试打印x的值,看看是否真的是一个列表?

标签: python numpy normalization elements


【解决方案1】:

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

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

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

另一个问题是,如果您的矩阵大小为 148x17 ,则在您的 while 循环中,您应该只检查直到 i&lt;17 而不是 i&lt;=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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 2018-03-12
    • 1970-01-01
    • 2020-04-02
    • 2015-01-09
    • 2020-03-19
    • 2014-12-15
    • 1970-01-01
    相关资源
    最近更新 更多