NumPy数组大小问题

1 投票
3 回答
1205 浏览
提问于 2025-04-17 18:38

我有一个大小为 (3, 3) 的 NumPy 数组。当我在 __main__ 模块中打印这个 数组 的形状时,得到的是 (3, 3)。但是,当我把这个数组传给一个函数,并在函数里打印它的大小时,得到的是 (3, )

这是为什么呢?

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

3 个回答

2

要理解为什么一个函数调用会改变一个numpy数组的形状,光靠没有代码是很难的。

关于第二个问题,单元素元组的标准写法是用逗号,而不是用括号。比如说(3+3) * 2 - 如果括号能表示元组,那整个表达式就会出错,因为你不能把一个元组和一个整数相乘。更一般来说,Python在很多地方都允许使用尾随逗号:

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

这同样适用于列表、字典和函数调用 - 基本上,只要Python期待用逗号分隔的元素,尾随逗号都是有效的。

2

像这样的一组数据:(3, ) 表示这是一个只有一个元素的元组(在这个例子中是单维的)。这是正确的写法,后面有一个,,因为如果写成这样:(3),那么Python会把它当作一个被括号包围的数字,而不是一个元组。

看到实际的代码会更有帮助,但我猜测你传递的不是整个数组,而只是其中的一行(或一列)。

2

关于你的第二个问题:

在Python中,元组是可以有多个维度的。也就是说,你可以有一个 1-2-3-...-n 的元组。由于语法的原因,表示一个 1维 元组的方式是 ('元素',),这里的逗号是必须的。如果你写成 ('元素'),那么这只是括号里面的表达式而已。所以 (3) + 4 == 7 是对的,但 (3,) + 4 == TypeError 就会出错。同样,('元素') == '元素' 也是成立的。

关于你的第一个问题:

你很可能在传递数组的时候做错了什么。没有理由让NumPy数组错误地表现自己,除非这个数组发生了某种变化。

撰写回答