python - 如何使用numpy在for循环中向量化矩阵和?

标签 python numpy scipy vectorization broadcast

基本上我有一个行数=3600 和列数=5 的矩阵,并希望将其下采样到 60 行的地 block :

import numpy as np

X = np.random.rand(3600,5)

down_sample = 60
ds_rng = range(0,X.shape[0],down_sample)
X_ds = np.zeros((ds_rng.__len__(),X.shape[1]))

i = 0
for j in ds_rng:
    X_ds[i,:] = np.sum( X[j:j+down_sample,:], axis=0 )
    i += 1

最佳答案

另一种方法可能是:

def blockwise_sum(X, down_sample=60):
    n, m = X.shape

    ds_n = n / down_sample
    N = ds_n * down_sample

    if N == n:
        return np.sum(X.reshape(-1, down_sample, m), axis=1)

    X_ds = np.zeros((ds_n + 1, m))
    X_ds[:ds_n] = np.sum(X[:N].reshape(-1, down_sample, m), axis=1)
    X_ds[-1] = np.sum(X[N:], axis=0)

    return X_ds

不过我不知道它是否更快。

关于python - 如何使用numpy在for循环中向量化矩阵和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25436783/

相关文章:

python - Numpy - 将行添加到数组

python - 隔离 3d 数据点的策略

python - 属性错误 : 'FileField' object has no attribute 'File'

python - 下面的Python表达式是如何工作的?

python - 以管道方式输出决策树

python - 在给定坐标的不规则网格上查找最近的地面像素

python - 用于小特征值的 Scipy 稀疏 eigsh()

python - 使用 curve_fit 拟合接受一维数组输入并返回二维数组的函数的正确方法

python - 如何在 spaCy 中获取名词短语的标记?

python - 调用函数数组