【发布时间】:2018-05-05 23:00:10
【问题描述】:
我有一个像这样的 numpy 数组:
candidates =
array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0],
[0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1],
[1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0]])
而且我不明白candidates[0]有什么区别:
candidates[0] =
array([1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]
candidates[0].shape = (34,)
还有candidates[0:1]:
candidates[0:1] =
array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]])
candidates[0:1].shape = (1, 34)
因为我相信两者应该给出完全相同的结果?我的意思是后者,即candidates[0:1] 应该只代表第一个元素,对吗?那么,这两者到底有什么区别呢?
【问题讨论】:
-
和普通的Python切片一样:
candidates[0]是第一个元素(本例中为第一行);candidates[0:1]是第一个元素的集合(在这种情况下,是一个仅包含第一行的二维数组)。这就是形状不同的原因。比较lst = [1,2,3]然后lst[0]与lst[0:1]:一个是1,另一个是[1]。 -
嗨。这个问题已经讨论过了stackoverflow.com/questions/42882842/…
-
@decadenza 我不确定它是否是 dup,因为我不确定 OP 是否不清楚为什么
[0]和[0:1]返回不同的形状,或者为什么 @ 987654338@ 和(1,34)是不同的形状。链接的问题只回答后者。 -
@decadenza (另外,您链接的问题本身已作为this one 的副本关闭,我认为它有更好的答案 - 但幸运的是,如果我们想关闭它,我们可以链接两者。)
-
@abarnert 感谢您的回复!我知道
[0]和[0:1]之间的区别。我只需要了解后面的结果是一个二维数组。 Idk也许我应该从问题中删除“大小”一词以避免混淆?或者,如果您认为您可以改进我的措辞,请继续,因为英语不是我的第一语言哈哈。谢谢!