1. ホーム
  2. python

[解決済み] TypeError: 長さ1の配列のみがPythonのスカラーに変換され、プロットが表示される

2022-03-03 02:50:51

質問

このようなPythonのコードを持っています。

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.int(x)

x = np.arange(1, 15.1, 0.1)
plt.plot(x, f(x))
plt.show()

といったエラー。

TypeError: only length-1 arrays can be converted to Python scalars

どうすれば直るのでしょうか?

どのように解決するのですか?

関数が単一の値を期待し、代わりに配列を渡した場合、エラー "長さ1の配列のみがPythonのスカラーに変換可能" が発生します。

のコールサインを見てみると np.int 配列ではなく、1つの値を受け取っていることがわかります。一般に、単一の要素を受け取る関数を配列の各要素に適用したい場合は、次のようにします。 np.vectorize :

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.int(x)
f2 = np.vectorize(f)
x = np.arange(1, 15.1, 0.1)
plt.plot(x, f2(x))
plt.show()

f(x)の定義を省略して、vectorize関数にnp.intを渡すだけでいいのです。 f2 = np.vectorize(np.int) .

なお np.vectorize は単なる便利な関数で、基本的にはforループです。これは大きな配列に対しては非効率的でしょう。可能であればいつでも、本当にベクトル化された関数やメソッド ( astype(int) として FFTの提案 ).