是否存在'pythonic'方式,无需多个for循环即可清晰地进行下采样?
下面的示例是我希望摆脱的for循环类型。
<a>
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)
答案 0 :(得分:3)
如果要进行“真实”下采样,其中每个值都是k个值的平均值,则可以使用
unsampled_array.reshape(-1, k).mean(1)
确保unsampled_array是一个np.array。在您的情况下,k = 2。那会给你:
[2. 6. 10. 14. 14. 18。]
*更新:如果您只想获取每k个项目的第一个项目,则可以使用以下代码:
unsampled_array.reshape(-1, 2)[:, 0]
看看这个情节:
答案 1 :(得分:2)
您需要功能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)