你的第一个写法,给 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