🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2379閲覧

Python3で1変数ベクトル値関数の微分の計算

aaa_ytooooo

総合スコア16

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/12/05 13:51

編集2020/12/06 12:22

前提・実現したいこと

Python3で1変数ベクトル値関数の微分を計算したいと思っています。例として
イメージ説明
f(x)からf'(x)を計算したいです。ただし,xに関して離散化し,2次元配列として扱いたいと思っております。例は3次元ベクトルですが、1〜70万次元を想定しております。ある計算の一部の計算として想定しておりますので,できる限り速く計算する方法が知りたいです。

該当のソースコード

Python3

1import numpy as np 2 3x = np.linspace(-1, 1, 1000) 4y = np.array([x, x**2, np.exp(x)]).T #yは1000×3の配列 5dy = np.gradient(y, x) 6print(dy)

発生している問題・エラーメッセージ

Traceback (most recent call last): File "test.py", line 4, in <module> dy = np.gradient(y, x) File "/Users/user/.pyenv/versions/3.6.5/lib/python3.6/site-packages/numpy/lib/function_base.py", line 1013, in gradient raise TypeError("invalid number of arguments") TypeError: invalid number of arguments

試したこと

numpyのgradientを用いて計算しようと考え,スカラー関数についてはうまく計算することができましたが,ベクトル値関数では計算することができませんでした。numpyのgradientにこだわるつもりはありませんが,できるかぎり計算時間を短くしたいです。

補足情報(FW/ツールのバージョンなど)

Python 3.6.5
numpy 1.16.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Python

1import numpy as np 2 3x = np.linspace(-1, 1, 1000) 4y = np.array([x, x**2, np.exp(x)]).T #yは1000×3の配列 5for i in range(y.shape[1]): 6 dy = np.gradient(y[:,i], x) 7 print(dy)

投稿2020/12/05 14:01

meg_

総合スコア10739

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaa_ytooooo

2020/12/05 14:11

回答いただきありがとうございます。ベクトルの次元が小さい時はいいのですが、次元が大きい時も想定しており、for文を使うと計算時間がかかってしまうため、できる限りfor文は使いたくないと思っております。
meg_

2020/12/05 14:53 編集

> 次元が大きい時も想定しており どのぐらいを想定していますか? 実際に計測してみて実用に耐えられない程遅かったのでしょうか? このデータで何秒が良い、等と具体的な数値を追記されるとご希望の回答が付きやすくなるかと思います。
aaa_ytooooo

2020/12/06 10:37

ご指摘いただきありがとうございます。次元は,1〜700,000を考えております。さらに,2階微分を10000回ほど計算したいと考えております。時間を計測することはできていないのですが,他の処理もあり,できる限り短くしたいと思っております。
meg_

2020/12/06 11:46

> 次元は,1〜700,000を考えております。さらに,2階微分を10000回ほど計算したいと考えております。時間を計測することはできていないのですが,他の処理もあり,できる限り短くしたいと思っております。 質問は編集できますので、上記情報は質問に追記すると有識者の方から回答が付くかもしれません。 質問の例ですと「計算式が70万種類ある」というイメージで合ってますか?
aaa_ytooooo

2020/12/06 12:18

計算式が70万種類あるというイメージで合っております。ただし,理論上微分可能な関数であり,例のような初等関数では表せないものを考えております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問