[問題] parameter數量錯誤與逗號問題

作者: worthy0429 (鹹鹹)   2018-09-13 19:14:04
想問一些關於parameter數量錯誤的問題
如果這樣子打
x_train = x_train.apply(np.reshape, args=(60,60,1) )
則會出現
TypeError:reshape() takes from 2 to 3 positional arguments but 4 were given
但是若改成
x_train = x_train.apply(np.reshape, args=((60,60,1),) )
之後就可以了,有大大能幫我解惑嗎
上網找一些資訊在後面加逗號似乎會把她變成一個tuple,想請問這個錯誤跟那個又關係嗎
,另外錯誤顯示的那4個arguments是哪四個呢
作者: gmccntzx1 (o.O)   2018-09-13 23:55:00
你的第一個寫法,給 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

Links booklink

Contact Us: admin [ a t ] ucptt.com