Как построить сэмплер массива до конца с NumPy? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть np.array:

>>> arr = np.arange(7)
>>> arr
array([0, 1, 2, 3, 4, 5, 6])

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

>>> do_what_i_want(arr, 3):
[
    [[], [0, 1, 2, 3, 4, 5, 6]],
    [[0], [1, 2, 3, 4, 5, 6]],
    [[0, 1], [2, 3 ,4, 5, 6]],
    [[0, 1, 2], [3, 4, 5, 6]],
    [[0, 1, 2, 3], [4, 5, 6]]
]

Мне нужно реализовать do_what_i_want() функцию

UPD Мой текущий код:

def till_end_transform(self, arr, n):
    I = np.arange(n) + np.arange(arr.shape[0] - n + 1).reshape(-1, 1)
    # A[I]: https://docs.scipy.org/doc/numpy/user/quickstart.html#indexing-with-arrays-of-indices
    # B is list of num_of_features-dimenstional charts
    B = A[I].reshape(-1, M * A.shape[1], A.shape[2])
    return B

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Python-функции определяются с помощью ключевого слова def.Например:

def hello(name):
    print('Hello, %s' % name)

hello('UIUAA')

Я нашел довольно хорошие примеры примеров для массивов и функций на этой веб-странице:

http://cs231n.github.io/python-numpy-tutorial/#python-functions

http://cs231n.github.io/python-numpy-tutorial/#numpy-arrays

Надеюсь, я мог бы помочь вам с этим.

0 голосов
/ 23 октября 2018

Вы ищете np.split:

def splitter(arr, val):
    return [np.split(arr, [i]) for i in range(val+1)]

>>> splitter(np.arange(7), 3)
[[array([], dtype=int32), array([0, 1, 2, 3, 4, 5, 6])],
 [array([0]), array([1, 2, 3, 4, 5, 6])],
 [array([0, 1]), array([2, 3, 4, 5, 6])],
 [array([0, 1, 2]), array([3, 4, 5, 6])]]
0 голосов
/ 23 октября 2018

Чтобы получить то, что вы хотите, вы можете использовать понимание:

def do_what_i_want(arr, k):
    return [[arr[:i], arr[i:]] for i in range(len(arr)-k+1)]

Что производит:

a = [0, 1, 2, 3, 4, 5, 6]
do_what_i_want(a, 3)
#[[[], [0, 1, 2, 3, 4, 5, 6]],
# [[0], [1, 2, 3, 4, 5, 6]],
# [[0, 1], [2, 3, 4, 5, 6]],
# [[0, 1, 2], [3, 4, 5, 6]],
# [[0, 1, 2, 3], [4, 5, 6]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...