#python #arrays #numpy
#python #массивы #numpy
Вопрос:
In [136]: d = np.ones((1,2,3,4))
In [167]: d[0][0][0:2][0]
Out[167]: array([ 1., 1., 1., 1.])
как показано выше, почему он не возвращает ровно 2 элемента
Ответ №1:
Посмотрите на сам массив. Это должно быть понятно само по себе
>>> d
array([[[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]],
[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]]]])
# first you grab the first and only element
>>> d[0]
array([[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]],
[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]]])
# then you get the first element out of the two groups
>>> d[0][0]
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
# thirdly, you get the two first elements as a list
>>> d[0][0][0:2]
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
# finally, you get the first element of the list
>>> d[0][0][0:2][0]
array([ 1., 1., 1., 1.])
Комментарии:
1. Я вижу, я становлюсь глупым. Я обнаружил, что то, что я хочу, — это d[0,0,0: 2,0] . Спасибо!
2. О, теперь я понимаю, чего ты хотел… Подробнее о срезах здесь: docs.python.org/2.3/whatsnew/section-slices.html
3. Возможно, вы также захотите использовать эту конструкцию массива, а не 1s … d = np.arange(1*2*3*4). изменить форму (1,2,3,4) … упрощает просмотр того, что вы возвращаете.