你的第一個寫法,給 np.reshape 的參數就是 3 個int: 60, 60, 1修正,正確來說是 4 個,第一個參數由 df.apply 提供即 np.reshape(x_train, 60, 60, 1) # <- 錯誤請看 numpy.reshape 的文件:
https://goo.gl/wRffJQ然後 df.apply 的文件:
https://goo.gl/BCkX83args要吃的參數型態就是 tuple所以給參數的方式就像這樣: args=(x, y, z, ...)其中 x, y, z 可以是任何型態 (視對象 func 而給)不,你看一下我上面的例子 args=(x, y, z...)如果僅僅將 60, 60, 1 這三個數包起來,就代表你只給了修正:就代表 args 拿到 3 個參數,分別為 60, 60, 1寫成 args=((60, 60, 1), ) 才表示 args 拿到一個參數叫做 (60, 60, 1) 的 tuple然後 trailing comma 可以看這篇解釋
https://stackoverflow.com/a/7992642簡單來說,如果你沒有給 trailing comma, 僅有單一元素的 tuple 會和 expression 混淆* generator expression或是其他因為內容很長需要多行分段的 code然後這個行為在 list, dict 上也可以用,但不加上也不會影響照你的例子來講,`a=(1),` 和 `a=(1,)` 的 a 都是tuple今天如果 args 只拿到 1 個參數,但你仍要確保 args 是tuple ,你要怎麼做?情況就是 args=(x),x 可以是任何型別。
https://repl.it/@naleraphael/GiveMeATuple