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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Python 3.x

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

解決済

ndarrayの演算後の全域print文のエラー

sigefuji
sigefuji

総合スコア114

Python 3.x

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

1回答

0リアクション

0クリップ

152閲覧

投稿2022/09/14 09:17

###前提
ndarrayの領域確保と全域プリントを調べていますが、エラーとなる場合があります。
全域print文#1,#2,#3,#4,#5,#6,#7 の内 #1から#5は正常で、#6,#7も正常(全域がプリントされること)と期待していますが、エラーとなります。
他に、#10のfloat変換を外した#11でもエラーとなります。
このことから、#10,#11,#12の演算を行う部分に問題があるように見えます。
なぜ#10,#11,#12の演算(差分を計算する)のところに問題があるのでしょうか。
#12の単なる代入だけでNGとなるところから、そもそもfloatに対する代入が問題のように見えます。
根本原因は何でしょうか? ndarrayの操作だけに限ります。
また、エラーの内容はなにか、正常時と同じような操作なのに、解せません。

実現したいこと

原因の理解とndarrayの操作に限っての対策

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

ValueError: Only callable can be used as callback

該当のソースコード

python

import numpy as np print('numpy version :', np.__version__) npdt = np.array([4377, 4378, 4375, 4374, 4380]) print("#1",npdt) #整数npアレイ a = np.arange(10) print("#2",a) df = np.array([0.0 for i in range(10)]) df2 = np.array([0.0 for i in range(10)]) intdf = np.array([0 for i in range(10)]) print("#3",df) #float=0 for i in range(1,len(npdt)): df[i] = float(npdt[i]) - float(npdt[i-1]) #10 #df[i] = npdt[i] - npdt[i-1] #11 df2[i] = float(npdt[i]) #12 intdf[i] = npdt[i] - npdt[i-1] #13 df[0]=0.0 intdf[0]=0 df2[0]=0 print(type(df)) print("#4",intdf) print("#5",df[0],df[1],df[2],df[3],df[4]) print("#6",df) print("#7",df2)

試したこと

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

コンソール出力
runfile('C:/book/rnn1/test2.py', wdir='C:/book/rnn1')
numpy version : 1.23.1
#1 [4377 4378 4375 4374 4380]
#2 [0 1 2 3 4 5 6 7 8 9]
#3 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
<class 'numpy.ndarray'>
#4 [ 0 1 -3 -1 6 0 0 0 0 0]
#5 0.0 1.0 -3.0 -1.0 6.0
#6 Traceback (most recent call last):

File "C:\book\rnn1\test2.py", line 25, in <module>
print("#6",df)

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 1592, in _array_str_implementation
return array2string(a, max_line_width, precision, suppress_small, ' ', "")

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 736, in array2string
return _array2string(a, options, separator, prefix)

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 513, in wrapper
return f(self, *args, **kwargs)

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 539, in _array2string
format_function = _get_format_function(data, **options)

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 472, in _get_format_function
return formatdict'float'

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 411, in <lambda>
'float': lambda: FloatingFormat(

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 932, in init
self.fillFormat(data)

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core\arrayprint.py", line 943, in fillFormat
with errstate(over='ignore'): # division can overflow

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core_ufunc_config.py", line 432, in enter
self.oldcall = seterrcall(self.call)

File "C:\anaconda3\envs\py38tf\lib\site-packages\numpy\core_ufunc_config.py", line 305, in seterrcall
raise ValueError("Only callable can be used as callback")

ValueError: Only callable can be used as callback

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jbpb0

2022/09/14 09:46

google colabで、質問のコードを全くそのまま実行してみたのですが、以下の表示がされて、エラーは出ませんでした numpy version : 1.21.6 #1 [4377 4378 4375 4374 4380] #2 [0 1 2 3 4 5 6 7 8 9] #3 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] <class 'numpy.ndarray'> #4 [ 0 1 -3 -1 6 0 0 0 0 0] #5 0.0 1.0 -3.0 -1.0 6.0 #6 [ 0. 1. -3. -1. 6. 0. 0. 0. 0. 0.] #7 [ 0. 4378. 4375. 4374. 4380. 0. 0. 0. 0. 0.]
jbpb0

2022/09/14 09:54

当方のmacのpythonでも、質問のコードを全くそのまま実行してみたのですが、google colabと同様に以下の表示がされて、エラーは出ませんでした numpy version : 1.21.5 #1 [4377 4378 4375 4374 4380] #2 [0 1 2 3 4 5 6 7 8 9] #3 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] <class 'numpy.ndarray'> #4 [ 0 1 -3 -1 6 0 0 0 0 0] #5 0.0 1.0 -3.0 -1.0 6.0 #6 [ 0. 1. -3. -1. 6. 0. 0. 0. 0. 0.] #7 [ 0. 4378. 4375. 4374. 4380. 0. 0. 0. 0. 0.]
sigefuji

2022/09/14 11:22

早速試していただきありがとうございます。 当方のnavigatorの仮想環境・keras用・pytorch用の2種類あって、問題はkerasで生じたので、 ならばと今keras用で試すとOKでした。ただnumpyのバージョンはそれぞれ1.23.1(エラー)と1.21.6と多少異なりますがそれくらいでと言いたくなります。 困りました。keras用の仮想環境を再構築やるよりなさそうかなと(悲しい)。 いずれにしてもコードは正しいですね。
sigefuji

2022/09/14 11:25

訂正  ならばと今keras用で試すとOKでした。 → ならばと今pytorch用で試すとOKでした。
jbpb0

2022/09/15 00:45

> numpyのバージョンはそれぞれ1.23.1(エラー)と1.21.6と多少異なります google colabでnumpyのバージョンを変えて確認しようと思ったのですが、numpy 1.22以降はpython 3.7用のwheelは用意されてなく、インストールできませんでした (google colabのpythonのバージョンを変えるのは、ちょっとめんどくさい) https://pypi.org/project/numpy/1.22.0/#files
sigefuji

2022/09/15 01:29

そこまでやっていただくには及びません。 もうanacond3をアンインストールしてインストール(それも2回目)中です。 ほんとにanacondaのバージョン管理には厳密で苦労します。この1ケ月くらいの間にインストールは何回も、仮想環境は数えくれないくらい。バージョンバン番号の範囲は出ますがやくたたずで、あっちをたてればこちらが立たずで、すべてを満足する組み合わせは運次第です。こんなことで普及しているらしいのが不思議。
sigefuji

2022/09/15 02:43

再構築が終った同じ仮想環境で、問題の発生しないことがわかりました。 環境が壊れていたと考えられます。
sigefuji

2022/09/15 02:45

他の環境で問題ないことが解決のヒントとなりました。ありがとうございました。
jbpb0

2022/09/15 04:17

> 再構築が終った同じ仮想環境で、問題の発生しないことがわかりました。 numpyのバージョンが1.23でも大丈夫でした?
sigefuji

2022/09/15 05:23

再構築した仮想環境のnumpyは1.22.3でした。1.23.1は試していません。 python 3.8.13 再構築時の全体のバージョン(インストール順でも変わる) matplotlib version : 3.5.2 scipy version : 1.7.3 numpy version : 1.22.3 tensorflow version : 2.9.1 keras version : 2.9.0 恐らくバージョンではなく何かがこわれたと思っています。spyderがquitできない現象もありましたので。タスクマネージャーでkill。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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