当前位置: 首页 > 面试题库 >

为什么用括号和逗号索引numpy数组的行为不同?

丁茂
2023-03-14
问题内容

我倾向于用括号为numpy数组(矩阵)建立索引,但是当我想对数组(矩阵)进行切片时,我注意到我必须使用逗号表示法。为什么是这样?例如,

>>> x = numpy.array([[1, 2], [3, 4], [5, 6]])
>>> x
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> x[1][1]
4                 # expected behavior
>>> x[1,1]
4                 # expected behavior
>>> x[:][1]
array([3, 4])     # huh?
>>> x[:,1]
array([2, 4, 6])  # expected behavior

问题答案:

这个:

x[:, 1]

表示“x沿第一个轴获取所有索引,但沿第二个轴仅获取索引1”。

这个:

x[:][1]

意思是“x沿第一个轴获取所有索引(所以的全部x),然后沿结果的 第一个 轴获取索引1 ”。您将应用于1错误的轴。

x[1][2]并且x[1, 2]仅是等效的,因为使用整数对数组进行索引会将所有其余轴移向形状的前面,因此的第一个轴x[1]是的第二个轴x。这一点根本没有概括。您应该几乎总是使用逗号而不是多个索引步骤。



 类似资料:
  • 我有一根绳子 我想用逗号分隔,但需要排除括号和引号内的逗号(单引号和双引号)。 这样地

  • 问题内容: 来自python Wiki 多元元组 在Python中,多元元组看起来像: … 但是,再次定义元组的是逗号而不是括号。 真的吗?! 那么为什么: 更严重的是,我不明白为什么不选择括号而不是逗号? 因为我认为在以下情况下会产生悖论: 但是,如果您认为圆括号 总是 负责实例化a ,那么用多个项目实例化的所有问题 都消失了。 例如在我的想象世界中: 我知道这是一个众所周知的功能,如果已经重复

  • 一个numpy数组a a = numpy.arange(12) 形状为a.shape = (12,) 为什么我们需要逗号?形状(12)是为其他东西保留的吗?

  • 问题内容: 我想知道为什么Java数组声明使用大括号而不是标准括号。如此处所示。我认为总体上可能需要进一步理解大括号,但这是我现在的议程。 相反,这是正确的。 问题答案: 圆括号通常表示集合和合奏,而圆括号通常表示类似C语言的参数。 很久以前,人们已经习惯了与C进行这种约定。我非常确定它可以在Java中以这种方式工作,以与旧语言保持某种语法一致性。

  • 问题内容: 我通过使用以下命令从sql查询中检索数据 我得到一个元组,如: 我想要一个像 是否存在可以做到这一点的功能? 问题答案: 用途: 您必须在这里使用map(它将元组中的所有项目都转换为字符串),因为否则您将获得。 关于功能的一些说明: 等价于。 它比使用列表理解要快一点: 如该答案的注释所示,可以使用生成器而不是列表。通常,这会更快,但是在这种情况下,它会 更慢 。 如果我要这样做: 这

  • 问题内容: Python文档中函数签名的格式有些混乱。将逗号放在开括号而不是之前有什么意义?嵌套括号的意义是什么? 情况如何: 我期望以下之一: 问题答案: 方括号表示内容是可选的,但方括号之外的所有内容均为必填项。 使用您的符号: 我希望必须写: 嵌套是必需的,因为如果您提供第三个参数,那么即使它是可选参数,也必须提供第二个参数。以下非嵌套替代方案将是模棱两可的: