###前提
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
1import numpy as np 2 3print('numpy version :', np.__version__) 4 5 6npdt = np.array([4377, 4378, 4375, 4374, 4380]) 7print("#1",npdt) #整数npアレイ 8 9a = np.arange(10) 10print("#2",a) 11 12df = np.array([0.0 for i in range(10)]) 13df2 = np.array([0.0 for i in range(10)]) 14intdf = np.array([0 for i in range(10)]) 15print("#3",df) #float=0 16 17for i in range(1,len(npdt)): 18 df[i] = float(npdt[i]) - float(npdt[i-1]) #10 19 #df[i] = npdt[i] - npdt[i-1] #11 20 df2[i] = float(npdt[i]) #12 21 intdf[i] = npdt[i] - npdt[i-1] #13 22df[0]=0.0 23intdf[0]=0 24df2[0]=0 25print(type(df)) 26print("#4",intdf) 27print("#5",df[0],df[1],df[2],df[3],df[4]) 28print("#6",df) 29print("#7",df2) 30
試したこと
補足情報(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

回答1件
あなたの回答
tips
プレビュー