.net column
.NET開発者のためのブログメディア

Pythonでsqrtを扱う方法とは?ルートを計算するためのsqrt関数の使用方法について紹介!

 
Pythonでsqrtを扱う方法とは?ルートを計算するためのsqrt関数の使用方法について紹介!
SE
Pythonでsqrtをどう使うか教えてください。
PM
はい。ルートを計算するためのsqrt関数の使い方についてご紹介しましょう。

Pythonでsqrt関数を使って、ルートを計算する4つの方法


Pythonのsqrt関数を使ってルートを計算する方法として、mathモジュール、numpyモジュール、sympyモジュール、scipyモジュールを紹介します。実際にPythonのソースコードを書きながら確認していきましょう。

mathモジュールのsqrt関数を使って、ルートを計算する方法

Pythonの標準ライブラリに含まれているmathモジュールは、以下のように書いてルートを計算します。


この例では、まずmathモジュールをimportしています。それからsqrt関数を呼び出して、4を引数としてわたしています。その結果として、2.0が返されていることがわかります。

また、mathモジュールのsqrt関数に配列や負数の引数をわたすとエラーとなってしまうので注意しましょう。

numpyモジュールのsqrt関数を使って、ルートを計算する方法

Pythonの外部ライブラリに含まれているnumpyモジュールの使用方法は、mathモジュールと同じです。以下のように書いて、ルートを計算します。


また、numpyモジュールのsqrt関数では、mathモジュールとは異なり、配列や負数を引数としてわたすことができます。


この例では、配列[9,8,7]を引数としてわたすと、各要素に対してルートが計算され、配列型で返されていることがわかります。また、負数-9を引数としてわたした場合は、nanが返されています。

sympyモジュールのsqrt関数を使って、ルートを計算する方法

Pythonの外部ライブラリに含まれているsympyモジュールの使用方法も、mathモジュールと同じです。以下のように書いて、ルートを計算します。


ここでmathモジュールやnumpyモジュールと異なる点は、小数点以下が表示されていないということです。別の例もあわせて確認してみましょう。


これまでmathモジュールやnumpyモジュールのsqrt関数でルート計算で割り切れない場合、無限小数が返されていました。ですが、sympyモジュールでは無理数として返すという特徴があります。

また、sympyモジュールは、負数を引数としてわたすと虚数単位をつけて結果を返します。


配列を引数としてわたした場合は、mathモジュールと同様にエラーとなります。

scipyモジュールのsqrt関数を使って、ルートを計算する方法

Pythonの外部ライブラリに含まれているscipyモジュールの使用方法は、mathモジュールと同じです。以下のように書いて、ルートを計算します。


また、scipyモジュールは、配列と負数のルート計算ができます。


ここで、負数計算の結果にsympyモジュールと違いがあります。それは、scipyモジュールの虚数単位がjとなっていることです。

Pythonでsqrtを使わずに、ルートを計算する2つの方法

Pythonでは、べき乗計算をするための算術演算子である**や組み込み関数pow()を使って、ルートを求めることができます。

算術演算子**を使って、ルートを計算する方法

以下のように書いて、ルートを計算します。


36をルート計算(0.5乗)した結果である6.0が返されてることがわかります。また、負数を引数としてわたした場合は、複素数の形式で結果を返します。


配列を引数としてわたした場合は、エラーとなります。

組み込み関数pow()を使って、ルートを計算する方法

以下のように書いて、ルートを計算します。


49をルート計算(0.5乗)した結果である7.0が返されてることがわかります。また、負数を引数としてわたした場合は、算術演算子**と同様に複素数の形式で結果を返します。


配列を引数としてわたした場合は、エラーとなります。

それぞれのルート計算方法の違いは?

Pythonにおける、sqrt関数を使った4つのルート計算方法と、sqrt関数を使わない2つのルート計算方法を紹介しました。それぞれの計算手法において、算出できる引数のデータ型や、戻り値の形式に違いが見られました。

それらを以下の表に整理しました。なお、横列は引数のデータ型、縦列は使用モジュール、○×は計算が可能かどうかを表しています。()内は戻り値の形式を表しており、()がない場合は浮動小数点型が戻り値となっています。

正数 負数 配列
math × ×
numpy 〇(nan)
sympy 〇(整数 or 無理数) 〇(*I) ×
scipy 〇(j)
** 〇(複素数) ×
pow() 〇(複素数) ×

計算速度の測定

いくつかの計算方法がある場合、計算速度は選択の指標になります。以下の表にテストプログラムの実行時間をまとめました。

計算速度は環境によって変わりますので、この記事の結果は目安としてください。なお、テストプログラムではルート計算を10000*7回実行しています。結果には10000回のルート計算にかかった時間の平均が表示されています。

測定結果を確認すると、正数のルート計算はmathモジュールや、算術演算子**がより高速だとわかります。

負数のルート計算は、モジュールによって計算結果の形式が異なりますが、形式は問わないのであれば算術演算子**を使う方法が高速だとわかります。

配列の計算ができるモジュールはnumpyかscipyのみですが、今回のテストで用いた程度の配列であれば、numpyがより高速だとわかります。

正数 負数 配列
math 485 ns - -
numpy 2.01 µs 6.38 µs 10.5 µs
sympy 3.16 µs 2.54 µs -
scipy 21.2 µs 21.9 µs 27.1 µs
** 324 ns 556 ns -
pow() 538 ns 616 ns -
SE
Pythonでsqrt関数を使ったルートの計算方法、よく分かりました。
PM
Pythonでsqrt関数を使った計算可能な引数や実行速度についてもご参考にしてください。

まとめ

いかがでしたでしょうか。Pythonでは、ルートを計算するためのsqrt関数が、標準ライブラリや外部ライブラリにいくつも用意されています。この記事ではそのうち4つの使用方法を紹介しました。また、sqrt関数を使用しないルート計算の方法も2つ紹介しました。

sqrt関数の引数には注意が必要です。使用するモジュールごとに、エラーにならない引数をわたしているか確認しましょう。また、計算結果の形式がモジュールごとに異なることもあります。返してほしい形式にあわせて、使用するモジュールを選択しましょう。

ぜひご自身でソースコードを書いて、動作を確認してみてください。実行速度が意識できると、より高速なプログラムの開発に役立ちます。また、エラーメッセージも含めて確認しておくと、今後の開発で同様のエラーメッセージを見たときのヒントになります。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags