【问题标题】:ValueError for comparing value from a matrixValueError 用于比较矩阵中的值
【发布时间】:2015-10-12 11:46:48
【问题描述】:

我将矩阵(使用 NumPy 创建)中的每个值与变量的值进行比较。但我不断收到此错误:

文件“main.py”,第 63 行,在 findClusters 中 if(val

我尝试打印出该值,它不是一个数组,而是一个浮点值。当我给出 all(val) 时,错误是“float is not iterable” 我的代码有什么问题?

for i in range(0,count):
    nearest = 99999.99
    for ctr in center:
        val = mtrx.item((ctr,i))
        if(val<=nearest):
            nearest = mtrx[ctr][i]
            centerassign = ctr

【问题讨论】:

  • 试试if val.all() &lt;= nearest:
  • 然后我得到“AttributeError: 'float' object has no attribute 'all'”
  • 我不是 numpy 专家,但你为什么在 nearest = mtrx[ctr][i] 中使用简单索引而不在 val = mtrx.item((ctr,i)) 中使用?
  • 我最初使用的是简单索引,但后来我认为这可能是比较和更改时的错误。无论哪种方式,我都会遇到相同的错误。

标签: python numpy matrix


【解决方案1】:

检查valnearest。一个或另一个,或两者都是数组(或 numpy 矩阵)。比较的结果是一个数组 - 多值。但是 Python if 需要一个布尔值。

查看相关边栏,了解有关 ValueERROr, The truth value ... 的众多 SO 问题。

最初nearest 是标量,但在后面的循环中它设置为:mtrx[ctr][i]

假设mtrxnp.matrix,请注意索引操作仍可能返回二维数组,即矩阵。

如果您想从矩阵中选择一个项目,请使用mtrx[ctr,i]。不要使用连续括号 ([][]) - 除非您清楚地了解它们在做什么。

【讨论】:

  • 我尝试将 all() 赋予 val 和最近,错误变为 - 'float' 对象没有属性 'all'。因此,它们都必须是浮点对象而不是数组。然后我尝试打印出这些值,但在输出中看不到任何数组。
  • 就像我说的,nearest 第一次是浮动的;您需要检查第二次迭代。
猜你喜欢
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
相关资源
最近更新 更多