我的NumPy
array
大小为(3,3)。当我在array
模块中打印__main__
的形状时,我得到(3, 3)
。但是我将这个数组传递给一个函数,当我在函数中打印它的大小时,我得到(3, )
。
为什么会这样?
此外,元组的最后一个元素未指定是什么意思?也就是说,首先(3, )
不应该是一个无效的元组?
答案 0 :(得分:2)
这样的元组:(3, )
意味着它是一个带有单个元素的元组(在这种情况下是单个维度)。这是正确的语法 - 尾随,
,因为如果它看起来像这样:(3)
那么Python会把它解释为括号括起来的数字,而不是元组。
查看实际代码很有用,但我猜你没有传递整个数组,只传递它的一行(或一列)。
答案 1 :(得分:2)
很难说为什么函数调用会在不看代码的情况下重塑numpy数组。
关于第二个问题,这是单元素元组的标准符号 - 逗号而不是括号是使它成为元组的原因。考虑(3+3) * 2
- 如果括号产生元组,则整个表达式将无效,因为您不能将元组乘以int。更一般地说,Python允许在整个地方使用尾随逗号:
>>> (3,3,) == (3,3)
True
这也适用于列表,字典和函数调用 - 基本上,在Python期望逗号分隔的元素的任何地方,尾随逗号都是有效的。
答案 2 :(得分:2)
回答你的第二个问题:
Python中的元组是n维的。那就是你可以拥有一个1-2-3-...-n
元组。由于语法原因,您表示1-dimensional
元组的方式为('element',)
,其中尾随逗号是必需的。如果你有('element')
那么这只是括号内的表达式。所以(3) + 4 == 7
,但(3,) + 4 == TypeError
。同样('element') == 'element'.
回答你的第一个问题:
你很可能在传递数组时做错了。如果阵列没有某种类型的突变,NumPy阵列就没有理由歪曲自己。