np.array[:,0] 和 np.array[:,[0]] 有什么区别?
what's the difference between np.array[:,0] and np.array[:,[0]]?
我有一个 numpy 数组 cols2:
print(type(cols2))
print(cols2.shape)
<class 'numpy.ndarray'>
(97, 2)
我试图使用下面的第一个代码获取这个 2d numpy 数组的第一列,然后我得到了一个向量而不是我理想的一列数据。第二个代码似乎让我得到了理想的答案,但我很困惑第二个代码在零之外添加一个括号是做什么的?
print(type(cols2[:,0]))
print(cols2[:,0].shape)
<class 'numpy.ndarray'>
(97,)
print(type(cols2[:,[0]]))
print(cols2[:,[0]].shape)
<class 'numpy.ndarray'>
(97, 1)
cols2[:, 0]
指定要从二维数组中切出长度为 97
的一维向量。 cols2[:, [0]]
指定您要从二维数组中切出形状为 (97, 1)
的二维 sub-array。方括号 []
使一切变得不同。
v = np.arange(6).reshape(-1, 2)
v[:, 0]
array([0, 2, 4])
v[:, [0]]
array([[0],
[2],
[4]])
根本区别在于后一个命令中的额外维度(正如您所指出的)。这是预期的行为,在 numpy.ndarray.__get/setitem__
中实现并在 NumPy 文档中编纂。
您也可以指定 cols2[:,0:1]
达到同样的效果 - 列 sub-slice.
v[:, 0:1]
array([[0],
[2],
[4]])
有关更多信息,请查看 NumPy 文档中关于 Advanced Indexing 的注释。
cols2[:, [0]]
中 0
周围的额外方括号增加了一个额外的维度。
当您打印代码的结果时,这会变得更加清晰:
A = np.array([[1, 2],
[3, 4],
[5, 6]])
A.shape # (3, 2)
A[:, 0].shape # (3,)
A[:, 0] # array([1, 3, 5])
A[:, [0]]
# array([[1],
# [3],
# [5]])
一个n-D numpy数组只能用n整数来表示它的形状。因此,一维数组仅由一个整数表示。一维数组没有"rows"或"columns"的概念。
您应该克制将 numpy 数组视为具有 行 和 列 的冲动,而是将它们视为具有 [=24] =]尺寸和形状。这是numpy.array
和numpy.matrix
的根本区别。在几乎所有情况下,numpy.array
就足够了。
我有一个 numpy 数组 cols2:
print(type(cols2))
print(cols2.shape)
<class 'numpy.ndarray'>
(97, 2)
我试图使用下面的第一个代码获取这个 2d numpy 数组的第一列,然后我得到了一个向量而不是我理想的一列数据。第二个代码似乎让我得到了理想的答案,但我很困惑第二个代码在零之外添加一个括号是做什么的?
print(type(cols2[:,0]))
print(cols2[:,0].shape)
<class 'numpy.ndarray'>
(97,)
print(type(cols2[:,[0]]))
print(cols2[:,[0]].shape)
<class 'numpy.ndarray'>
(97, 1)
cols2[:, 0]
指定要从二维数组中切出长度为 97
的一维向量。 cols2[:, [0]]
指定您要从二维数组中切出形状为 (97, 1)
的二维 sub-array。方括号 []
使一切变得不同。
v = np.arange(6).reshape(-1, 2)
v[:, 0]
array([0, 2, 4])
v[:, [0]]
array([[0],
[2],
[4]])
根本区别在于后一个命令中的额外维度(正如您所指出的)。这是预期的行为,在 numpy.ndarray.__get/setitem__
中实现并在 NumPy 文档中编纂。
您也可以指定 cols2[:,0:1]
达到同样的效果 - 列 sub-slice.
v[:, 0:1]
array([[0],
[2],
[4]])
有关更多信息,请查看 NumPy 文档中关于 Advanced Indexing 的注释。
cols2[:, [0]]
中 0
周围的额外方括号增加了一个额外的维度。
当您打印代码的结果时,这会变得更加清晰:
A = np.array([[1, 2],
[3, 4],
[5, 6]])
A.shape # (3, 2)
A[:, 0].shape # (3,)
A[:, 0] # array([1, 3, 5])
A[:, [0]]
# array([[1],
# [3],
# [5]])
一个n-D numpy数组只能用n整数来表示它的形状。因此,一维数组仅由一个整数表示。一维数组没有"rows"或"columns"的概念。
您应该克制将 numpy 数组视为具有 行 和 列 的冲动,而是将它们视为具有 [=24] =]尺寸和形状。这是numpy.array
和numpy.matrix
的根本区别。在几乎所有情况下,numpy.array
就足够了。