1

我有一个NumPy array大小为 (3, 3) 的。当我打印array内部__main__模块的形状时,我得到(3, 3). 但是我将这个数组传递给一个函数,当我在函数中打印它的大小时,我得到了(3, ).

为什么会这样?

另外,元组的最后一个元素未指定是什么意思?也就是说,(3, )首先不应该是一个无效的元组吗?

4

3 回答 3

2

像这样的元组:(3, )意味着它是一个具有单个元素的元组(在这种情况下是单个维度)。这是正确的语法 - 带有尾随,,因为如果它看起来像这样:(3)那么 Python 会将其解释为用括号括起来的数字,而不是元组。

查看实际代码会很有用,但我猜您并没有传递整个数组,而只是传递其中的一行(或一列)。

于 2013-03-11T03:13:02.187 回答
2

很难说为什么一个函数调用会在没有看到代码的情况下重塑一个 numpy 数组。

关于第二个问题,这是单元素元组的标准表示法——逗号,而不是括号,是使它成为元组的原因。考虑一下(3+3) * 2- 如果括号构成一个元组,那么整个表达式将是无效的,因为你不能将一个元组乘以一个 int。更一般地说,Python 允许在所有地方使用尾随逗号:

>>> (3,3,) == (3,3)
True

这也适用于列表、字典和函数调用——基本上,在 Python 需要逗号分隔元素的任何地方,尾随逗号都是有效的。

于 2013-03-11T03:14:27.597 回答
2

回答你的第二个问题:

Python 中的元组是 n 维的。那就是你可以有一个1-2-3-...-n元组。由于语法,您表示1-dimensional元组的方式是('element',)尾随逗号是强制性的。如果你有,('element')那么这只是括号内的表达式。所以(3) + 4 == 7,但是(3,) + 4 == TypeError。同样地('element') == 'element'.

要回答您的第一个问题:

你很可能在传递数组时做错了什么。NumPy 数组没有理由在不对数组进行某种类型的突变的情况下歪曲自己。

于 2013-03-11T03:15:40.190 回答