Путаница с индексацией в Python - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в python, я искал код, похожий на следующий,

import numpy as np

a = np.ones([1,1,5,5], dtype='int64')
b = np.ones([11], dtype='float64')
x = b[a]
print (x.shape)
# (1, 1, 5, 5)

Я заглянул в документацию по питону numpy Я не нашел ничего связанного с таким делом. Я не уверен, что здесь происходит, и я не знаю, где искать.

Редактировать Актуальный код

def gausslabel(length=180, stride=2):
    gaussian_pdf = signal.gaussian(length+1, 3)
    label = np.reshape(np.arange(stride/2, length, stride), [1,1,-1,1])
    y = np.reshape(np.arange(stride/2, length, stride), [1,1,1,-1])
    delta = np.array(np.abs(label - y), dtype=int)
    delta = np.minimum(delta, length-delta)+length/2
    return gaussian_pdf[delta]

1 Ответ

0 голосов
/ 17 мая 2018

Я предполагаю, что этот код пытается продемонстрировать, что, если вы индексируете массив с помощью массива, результатом является массив такой же формы, что и индексирующий массив (в данном случае a), а не индексированный массив (т.е. b)

Но это сбивает с толку, потому что b полон 1 с. Скорее попробуйте это с b, полным разных чисел:

>> a = np.ones([1,1,5,5], dtype='int64')
>> b = np.arange(11) + 3
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13])
>>> b[a]
array([[[[4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4]]]])

, поскольку a является массивом 1 s, единственный индекс b, который проиндексирован, это b[1], что равно 4. Форма результата - форма a, массив, используемый в качестве индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...