1. ホーム
  2. python

[解決済み] TypeError: 浮動小数点数のみを使用する関数では、戻り配列はArrayTypeでなければなりません。

2022-02-05 21:50:48

質問

これは本当に困りますね。単語の重さを計算する関数があるのですが、ローカル変数a,bがともにfloat型であることを確認しました。

def word_weight(term):
    a = term_freq(term)
    print a, type(a)
    b = idf(term)
    print b, type(b)
    return a*log(b,2)

word_weight("the") のログを実行しています。

0.0208837518791 <type 'float'>
6.04987801572 <type 'float'>
Traceback (most recent call last):
  File "summary.py", line 59, in <module>
    print word_weight("the")
  File "summary.py", line 43, in word_weight
    return a*log(b,2)
TypeError: return arrays must be of ArrayType

なぜ

解決方法は?

使用しているのは numpy.log 関数の第2引数は base でなく、配列で出力します。

>>> import numpy as np
>>> np.log(1.1, 2)
Traceback (most recent call last):
  File "<ipython-input-5-4d17df635b06>", line 1, in <module>
    np.log(1.1, 2)
TypeError: return arrays must be of ArrayType

これで numpy.math.log またはPythonの math.log :

>>> np.math.log(1.1, 2)
0.13750352374993502
>>> import math
>>> math.log(1.1, 2) #This will return a float object not Numpy's scalar value
0.13750352374993502

あるいは、@WarrenWeckesser が提案したように、ベース2だけを扱うのであれば numpy.log2 :