Их формы разные, потому что они не одно и то же. Вы можете проверить, напечатав их:
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))
Урожайность:
[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))
Урожайность
[5 6 7 8] is shape (4,)
[[5 6 7 8]] is shape (1, 4)
[[5 6 7 8]] is shape (1, 4)
[[5 6 7 8]] is shape (1, 4)
Показывает, что вы на самом деле сейчас имеете дело с объектом той же формы. Надеюсь, это поможет прояснить ситуацию!