Как выполнить выборку массива в Python без цикла for - PullRequest
0 голосов
/ 25 февраля 2019

Есть ли "питонический" способ для чистого понижающего сэмпла без нескольких циклов for?

Этот пример ниже является типом цикла for, от которого я хочу избавиться.

Минимальный рабочий пример:

import numpy as np
unsampled_array = [1,3,5,7,9,11,13,15,17,19]
number_of_samples = 7
downsampled_array = []
downsampling_indices = np.linspace(0, len(unsampled_array)-1, number_of_samples).round()
for index in downsampling_indices:
    downsampled_array.append(unsampled_array[int(index)])
print(downsampled_array)

Результат:

>>> [ 1  5  7  9 13 17 19]

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Если вы хотите «реальную» понижающую дискретизацию, где каждое значение является средним значением k значений, вы можете использовать

unsampled_array.reshape(-1, k).mean(1) 

. Убедитесь, что unsampled_array - это np.array.В вашем случае k = 2.Это даст вам:

[2. 6. 10. 14. 18.]

* Обновление : если вы просто хотите взятьпервый элемент для каждого k элементов, вы можете использовать этот код:

unsampled_array.reshape(-1, 2)[:, 0]

Взгляните на этот участок:

enter image description here

0 голосов
/ 25 февраля 2019

Вам нужна функция np.ix_, следующая:

import numpy as np


unsampled_array = np.array([1,3,5,7,9,11,13,15,17,19])
number_of_samples = 5
downsampling_indices = np.linspace(0, len(unsampled_array)-1, number_of_samples).round()
downsampling_indices = np.array(downsampling_indices, dtype=np.int64)

indices = np.ix_(downsampling_indices)
downsampled_array = unsampled_array[indices]

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