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