質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

2804閲覧

分母が0の時を除いて計算し,結果をmatplotlibで表示したい.

hab_na201

総合スコア7

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/09/28 02:04

編集2022/01/12 10:55

(2052)/(x2 + y**2)

この関数に関して,分母が0の場合を除いて計算したいと考え,
以下のように書きました.

python

1def func(x, y): 2 3 if (x**2 + y**2) != 0: 4 return ((205**2)/(x**2 + y**2))

この時,
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
というエラーが出てしまいます.

全体としては

python

1import matplotlib.pyplot as plt 2import numpy as np 3from mpl_toolkits.mplot3d import Axes3D 4 5v = 0.25 6E=205*10**9 7P = 4.6*10*10**9 8 9def func(x, y): 10 11 if (x**2 + y**2) != 0: 12 return ((205**2)/(x**2 + y**2)) 13 14 15X, Y = np.meshgrid(np.arange(-3., 3., 0.5), 16 np.arange(-3., 3., 0.5)) 17Z = func(X, Y) 18 19# ワイヤーフレームでグラフを作成する。 20fig = plt.figure(figsize=(6, 6)) 21axes = fig.add_subplot(111, projection='3d') 22axes.plot_wireframe(X, Y, Z) 23plt.show()

このようになっています.

調べたところ,a.any()かa.all()にすればよいとのことでしたが具体的にどのようにすればよいのかわかりません.

何卒ご教授のほどよろしくお願いいたします.

環境は
Python 3.6.4 |Anaconda, Inc.|[MSC v.1900 64 bit] on win32
です.

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

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

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

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

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

meg_

2019/09/28 02:12

エラーメッセージは全文掲載しましょう。
guest

回答2

0

Python

1import matplotlib.pyplot as plt 2import numpy as np 3from mpl_toolkits.mplot3d import Axes3D 4 5v = 0.25 6E=205*10**9 7P = 4.6*10*10**9 8 9def func(x, y): 10 c = x**2 + y**2 11 return np.divide(205**2, c, out=np.full_like(c, np.inf), where=c!=0) 12 13X, Y = np.meshgrid(np.arange(-3., 3., 0.5), 14 np.arange(-3., 3., 0.5)) 15Z = func(X, Y) 16 17# ワイヤーフレームでグラフを作成する。 18fig = plt.figure(figsize=(6, 6)) 19axes = fig.add_subplot(111, projection='3d') 20axes.plot_wireframe(X, Y, Z) 21plt.show() 22

先に分母を変数cに入れます。そのあと、np.divideで205**2と変数cの除算をします。ただし、計算するのは変数cが0以外の場合とし、変数cが0の場合はoutで指定した値を入れます(今回は無限大を入れています)

参考記事:How to return 0 with divide by zero

投稿2019/09/28 06:23

nomuken

総合スコア1627

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

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

hab_na201

2019/09/30 05:33

ご回答ありがとうございました!
guest

0

何行目でエラーが発生しているかもぜひ確認してみてください。

if (x**2 + y**2) != 0:
のうち、(x**2 + y**2) != 0の返り値は一個のboolではなく、boolの行列です。
そのため、if文の条件判定に使うことができません。
ちなみに、x**2 + y**2の結果が非ゼロの箇所がTrueとなる行列です。

エラーを突破したいなら以下のコードでできます。
ただ、分母がゼロの時の扱いをどうしたいかですが。

python

1import matplotlib.pyplot as plt 2import numpy as np 3from mpl_toolkits.mplot3d import Axes3D 4 5v = 0.25 6E=205*10**9 7P = 4.6*10*10**9 8 9def func(x, y): 10 11 a = (x**2 + y**2) != np.zeros_like(x) 12 ret = np.zeros_like(a) 13 ret1 = ((205**2)/(x**2 + y**2)) 14 ret[a] = ret1[a] 15 return ret 16 17 18X, Y = np.meshgrid(np.arange(-3., 3., 0.5), 19 np.arange(-3., 3., 0.5)) 20Z = func(X, Y) 21 22# ワイヤーフレームでグラフを作成する。 23fig = plt.figure(figsize=(6, 6)) 24axes = fig.add_subplot(111, projection='3d') 25axes.plot_wireframe(X, Y, Z) 26plt.show()

投稿2019/09/28 02:12

編集2019/09/28 02:21
fukatani

総合スコア626

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

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

hab_na201

2019/09/30 05:32

ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問