带numpy的If语句

2024-10-01 17:22:20 发布

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

下面是我为我正在参加的课程编写的一个函数:

def idf(myMatrix,N):
    idfList = []
    df = 0
    transposedMatrix = list(zip(*myMatrix))

    for row in transposedMatrix:
        for num in row:
            if num > 0:
                df = df +1
        if(df>0):
            df= math.log10(N/df)
            idfList.append(df)
        else:
            idfList.append(df)
        df = 0
    return np.matrix(idfList)

idfList = idf(rawFreqMatrix,N)

我需要做一些矩阵运算,所以我导入了numpy,然后我得到了一个奇怪的错误:

^{pr2}$

我查了a.any()和a.all(),但它们似乎不是我要找的。在


Tags: 函数indfforifdefnumlist
2条回答

问题是numif num>0:中使用时不是标量。它不是数组就是矩阵。只有当if是标量时,if命令才有效。在

我将尝试说明(怀疑您的输入是matrix)类型:

In [1]: row=np.matrix([1,2,3,4,5])
...
In [3]: row.shape
Out[3]: (1, 5)

In [4]: for num in row:
   ...:     print num, num.shape
   ...:     
[[1 2 3 4 5]] (1, 5)
...
In [6]: num>0
Out[6]: matrix([[ True,  True,  True,  True,  True]], dtype=bool)

In [7]: if num>0:
   ...:     print 'yes'
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

在可能的情况下,matrix上的操作返回matrix,一个2d数组。即使一维是1。在

现在,如果cd1{cd1}是一个很好的

当我遇到这样的问题时,我会抛出很多类似print row.shape的命令,以确保各种数组的维数是我所期望的。在

不要使用matrix。始终坚持使用array。在其他的挫折中,matrix不能很好地使用迭代;它总是给你一个2D矩阵结果。这意味着list(zip(*myMatrix))执行以下操作:

>>> list(zip(*numpy.matrix([[1, 2], [3, 4]])))
[(matrix([[1, 2]]), matrix([[3, 4]]))]

接下来的循环会变得更糟:

^{pr2}$

实际上,您根本不应该做list(zip(*some_numpy_object))或遍历数组,但我们将一次处理一个问题。在

相关问题 更多 >

    热门问题