NumPy数组大小问题
我有一个大小为 (3, 3) 的 NumPy
数组
。当我在 __main__
模块中打印这个 数组
的形状时,得到的是 (3, 3)
。但是,当我把这个数组传给一个函数,并在函数里打印它的大小时,得到的是 (3, )
。
这是为什么呢?
另外,元组的最后一个元素没有指定是什么意思?也就是说,(3, )
不是应该是一个无效的元组吗?
3 个回答
要理解为什么一个函数调用会改变一个numpy数组的形状,光靠没有代码是很难的。
关于第二个问题,单元素元组的标准写法是用逗号,而不是用括号。比如说(3+3) * 2
- 如果括号能表示元组,那整个表达式就会出错,因为你不能把一个元组和一个整数相乘。更一般来说,Python在很多地方都允许使用尾随逗号:
>>> (3,3,) == (3,3)
True
这同样适用于列表、字典和函数调用 - 基本上,只要Python期待用逗号分隔的元素,尾随逗号都是有效的。
像这样的一组数据:(3, )
表示这是一个只有一个元素的元组(在这个例子中是单维的)。这是正确的写法,后面有一个,
,因为如果写成这样:(3)
,那么Python会把它当作一个被括号包围的数字,而不是一个元组。
看到实际的代码会更有帮助,但我猜测你传递的不是整个数组,而只是其中的一行(或一列)。
关于你的第二个问题:
在Python中,元组是可以有多个维度的。也就是说,你可以有一个 1-2-3-...-n
的元组。由于语法的原因,表示一个 1维
元组的方式是 ('元素',)
,这里的逗号是必须的。如果你写成 ('元素')
,那么这只是括号里面的表达式而已。所以 (3) + 4 == 7
是对的,但 (3,) + 4 == TypeError
就会出错。同样,('元素') == '元素'
也是成立的。
关于你的第一个问题:
你很可能在传递数组的时候做错了什么。没有理由让NumPy数组错误地表现自己,除非这个数组发生了某种变化。