繁体   English   中英

为什么numpy数组arr2d [:,:1]和arr2d [:,0]产生不同的结果?

[英]Why do numpy array arr2d[:, :1] and arr2d[:, 0] produce different results?

说:

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

arr2d[:, :1]给了我

array([[1],
       [4],
       [7]])

arr2d[:,0]给了我

array([1, 4, 7])

我以为他们会产生完全相同的东西。

1)当你说arr2d[:, 0] ,你说的是给我arr2d中所有行的第0个索引(这是另一种说法,给我第0列)。

2)当你说arr2d[:, :1] ,你说的是给我所有:1 arr2d中所有行的:1索引。 Numpy解释:1与解释0:1 因此,你说“对于每一行,给我每行的第0个到第一个索引(不包括”)。 事实证明这只是第0个索引,但你明确要求第二个维度的长度为1(因为0:1只是“长度”一个)。

所以:

1)

print arr2d[:, 0].shape

输出:

(3L,)

2)

print arr2d[:, 0:1].shape

输出:

(3L, 1L)

我还是不明白,他们为什么不回归同样的事情呢?

考虑:

print arr2d[:, 0:3]
print arr2d[:, 0:3].shape

print arr2d[:, 0:2]
print arr2d[:, 0:2].shape

print arr2d[:, 0:1]
print arr2d[:, 0:1].shape

这输出:

[[1 2 3]
 [4 5 6]
 [7 8 9]]
(3L, 3L)

[[1 2]
 [4 5]
 [7 8]]
(3L, 2L)

[[1]
 [4]
 [7]]
(3L, 1L)

对于最后一个形状(3L,)来说会有点出乎意料并且不一致。

使用列表,您具有与之相同的行为:

>>> a = [1, 2, 3, 4]
>>> a[0]
1
>>> a[:1]
[1]

numpy的加入是axis的引入,这使得它不那么直观。

在第一种情况下,您将返回特定索引处的项目,在第二种情况下,您将返回列表的一部分。


对于numpy ,对于前者,你选择第一列中返回一个轴数组的所有项目(比索引时预期的父项轴数少一个),但在第二种情况下,你'重新切片原始数组,结果仍然保留父数组的原始尺寸。

索引':1'表示:

“从该项目的列表 index 0index 0这显然是1个项目的列表”。

索引'0'表示:

' index 0处的项目'。

将其扩展到您的问题应该会使您获得的结果非常清晰。

arr2d[:, :1]表示'对应于所有行的数据和列0到0'的列表。

所以结果是一个列表列表。

arr2d[:, 0]表示'对应于所有行而只是第一列的数据'。

所以这只是一个清单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM