看板 Python 關於我們 聯絡資訊
想問一些關於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是哪四個呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.118.207.2 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1536837246.A.B4D.html
gmccntzx1: 你的第一個寫法,給 np.reshape 的參數就是 3 個 09/13 23:55
gmccntzx1: int: 60, 60, 1 09/13 23:55
gmccntzx1: 修正,正確來說是 4 個,第一個參數由 df.apply 提供 09/13 23:57
gmccntzx1: 即 np.reshape(x_train, 60, 60, 1) # <- 錯誤 09/13 23:58
gmccntzx1: 請看 numpy.reshape 的文件: https://goo.gl/wRffJQ 09/13 23:59
gmccntzx1: 然後 df.apply 的文件:https://goo.gl/BCkX83 09/14 00:03
gmccntzx1: args要吃的參數型態就是 tuple 09/14 00:03
gmccntzx1: 所以給參數的方式就像這樣: args=(x, y, z, ...) 09/14 00:04
gmccntzx1: 其中 x, y, z 可以是任何型態 (視對象 func 而給) 09/14 00:05
我前面第一行的程式若改成x_train = x_train.apply(np.reshape, args =((60,60,1)) )的話也會出現同樣的錯誤耶 我也有上網先去看apply的文件我知道要傳入tuple,但是若將(60,60,1)括號起來他不就也變成tuple了嗎,為什麼還要一個逗號呢 ※ 編輯: worthy0429 (219.70.213.17), 09/14/2018 00:25:52
gmccntzx1: 不,你看一下我上面的例子 args=(x, y, z...) 09/14 00:36
gmccntzx1: 如果僅僅將 60, 60, 1 這三個數包起來,就代表你只給了 09/14 00:36
gmccntzx1: 修正:就代表 args 拿到 3 個參數,分別為 60, 60, 1 09/14 00:38
gmccntzx1: 寫成 args=((60, 60, 1), ) 才表示 args 拿到一個參數 09/14 00:38
gmccntzx1: 叫做 (60, 60, 1) 的 tuple 09/14 00:39
gmccntzx1: 然後 trailing comma 可以看這篇解釋 09/14 00:40
gmccntzx1: https://stackoverflow.com/a/7992642 09/14 00:41
gmccntzx1: 簡單來說,如果你沒有給 trailing comma, 僅有單一元素 09/14 00:42
gmccntzx1: 的 tuple 會和 expression 混淆 09/14 00:43
gmccntzx1: * generator expression 09/14 00:44
gmccntzx1: 或是其他因為內容很長需要多行分段的 code 09/14 00:45
我有看到,就是a=(1)這樣是int,a=(1),這樣會是tuple,如果單一元素後面家要加逗號才會變tuple ,但是我在想args=(x,y,z),像我這樣子(60,60,1)括號刮起來,不就等於x=(60,60,1)所以已經是tuple了不用再逗號了吧? 我就是一直卡在這邊不好意思,我有聽懂你那個3個int的說法,只是不太清楚為什麼有括號了還是3個int..,你剛傳的那幾個網址 我都有先看過了可是還是覺得卡卡的怪怪的想釐清一下自己的想法 ※ 編輯: worthy0429 (219.70.213.17), 09/14/2018 00:51:28
gmccntzx1: 然後這個行為在 list, dict 上也可以用,但不加上也不 09/14 00:47
gmccntzx1: 會影響 09/14 00:47
gmccntzx1: 照你的例子來講,`a=(1),` 和 `a=(1,)` 的 a 都是 09/14 01:05
gmccntzx1: tuple 09/14 01:05
gmccntzx1: 今天如果 args 只拿到 1 個參數,但你仍要確保 args 是 09/14 01:06
gmccntzx1: tuple ,你要怎麼做? 09/14 01:07
gmccntzx1: 情況就是 args=(x),x 可以是任何型別。 09/14 01:08
gmccntzx1: https://repl.it/@naleraphael/GiveMeATuple 09/14 01:26
這個例子我有看懂,但是若是將裡面的1全部改成'1,2',這樣就會全部都是tuple呀,這跟我60,60,1是一樣的吧.. ※ 編輯: worthy0429 (140.118.207.2), 09/14/2018 17:17:09 抱歉,真的很感謝你但是我是不是鬼打牆了QAQ ※ 編輯: worthy0429 (140.118.207.2), 09/14/2018 17:19:17 就是單一元素需要trail comma,但是60,60,1有三個元素哩 ※ 編輯: worthy0429 (140.118.207.2), 09/14/2018 17:20:39