python - 优化Python在三迭代语句中的计数

标签 python

全部,

我尝试计算满足以下条件的项目数 房屋 id==m 和转换后的日段 id == n 和邻域函数 == m 其中房屋 ID 由 docs['house_id'] 表示,日段 ID 由 docs['transformed_dayseg_id'] 表示,邻域函数由 self.CF/self.TF/self.BF 表示。

为此,我按照以下代码进行计数。然而,它太慢了。关于优化 python 计数代码有什么想法吗?

def get_mnf_counter(self, docs, dtype):
    x = np.zeros((self.M,self.N,self.K))
    for m in range(self.M):
        for n in range(self.N):
            for k in range(self.K):
                if dtype==1: #checkin
                    x[m, n, k]=sum((np.array(docs['house_id'])==m) & (np.array(docs['transformed_dayseg_id'])==n) & (self.CF==k))
                elif dtype==2: #taxi
                    x[m, n, k]=sum((np.array(docs['house_id'])==m) & (np.array(docs['transformed_dayseg_id'])==n) & (self.TF==k))
                elif dtpe==3: #bus
                    x[m, n, k]=sum((np.array(docs['house_id'])==m) & (np.array(docs['transformed_dayseg_id'])==n) & (self.BF==k))
                else:
                    raise Exception("index of checkin/taxi/bus/ is wrong")
    return x

最佳答案

您可以使用itertools.product,如下所示

from itertools import product
...
...

for m, n, k in product(range(self.M), range(self.N), range(self.K)):
   ...

更好的消息是,您可以进一步优化代码,就像这样

from itertools import product
def get_mnf_counter(self, docs, dtype):
    x = np.zeros((self.M, self.N, self.K))

    if dtype not in (1, 2, 3):
        raise Exception("index of checkin/taxi/bus/ is wrong")

    if dtype == 1:
        value = self.CF
    elif dtype == 2:
        value = self.TF
    else:
        value = self.BF

    house_id = np.array(docs['house_id'])
    dayseg_id = np.array(docs['transformed_dayseg_id'])

    for m, n, k in product(range(self.M), range(self.N), range(self.K)):
        x[m, n, k] = sum((house_id == m) & (dayseg_id == n) & (value == k))

由于您的算法是 O(N ^ 3),因此您在这里无能为力。

关于python - 优化Python在三迭代语句中的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27674353/

相关文章:

python - 环境变量中的 JUPYTER_PATH 不起作用

python - 使用 python boto 检索安全组但设置 vpc id

python - vmcloak 安装后失败,语法无效

python - 如何加快一系列文件中存在的键的总和? - Pandas ,nltk

python - pandas.Series 中的字符串总是小于 0 吗?

python - 导入错误 : No module named clr when using CPython of python. 组织

python - 一个列表中的两个总和

python - 将字典转换为配置文件,然后从配置中恢复字典

python - 如何连接两个具有不同 MultiIndex 值的数据帧并使一个数据帧重复?

python - 在python3中使用带有beautifulsoup的子字符串查找html标签