切片索引如何在numpy数组中工作

时间:2019-04-08 20:48:49

标签: python numpy numpy-ndarray

假设我们有一个数组

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

现在我有下面

row_r1 = a[1, :]
row_r2 = a[1:2, :]

print(row_r1.shape)
print(row_r2.shape)

我不明白为什么row_r1.shape是(4,)而row_r2.shape是(1,4)

它们的形状不应该全部等于(4,)吗?

2 个答案:

答案 0 :(得分:1)

我喜欢这样想。状态row[1, :]的第一种方式是让我获得第1行的所有值,如下所示:

enter image description here

返回: array([5, 6, 7, 8])

形状

(4,)在一个numpy数组中的四个值。

在第二个row[1:2, :]处,状态使我得到了索引1和索引2之间的数据切片:

enter image description here

返回:

array([[5, 6, 7, 8]]) 注意:双括号

形状

(1,4)在np.array的一行中有四个值。

答案 1 :(得分:0)

它们的形状不同,因为它们不是同一件事。您可以通过打印以下内容进行验证:

RIGHT JOIN

收益:

import numpy as np

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

row_r1 = a[1, :]
row_r2 = a[1:2, :]

print("{} is shape {}".format(row_r1, row_r1.shape))
print("{} is shape {}".format(row_r2, row_r2.shape))

这是因为索引将返回一个元素,而切片将返回一个数组。但是,您可以使用numpy数组可用的[5 6 7 8] is shape (4,) [[5 6 7 8]] is shape (1, 4) 函数来将它们操纵为同一对象。 代码:

.resize()

收益

import numpy as np

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

row_r1 = a[1, :]
row_r2 = a[1:2, :]

print("{} is shape {}".format(row_r1, row_r1.shape))
print("{} is shape {}".format(row_r2, row_r2.shape))
# Now resize row_r1 to be the same shape
row_r1.resize((1, 4))
print("{} is shape {}".format(row_r1, row_r1.shape))
print("{} is shape {}".format(row_r2, row_r2.shape))

表明您实际上正在处理同一形状的对象。希望这有助于清除它!