NumPy数组大小问题

时间:2013-03-11 03:01:07

标签: python numpy scipy

我的NumPy array大小为(3,3)。当我在array模块中打印__main__的形状时,我得到(3, 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阵列就没有理由歪曲自己。