【发布时间】:2020-03-22 10:45:52
【问题描述】:
给定 numpy 行包含来自 range(n) 的数字,
我想应用以下转换:
[1 0 1 2] --> [[0 1 0] [1 1 0] [1 2 0] [1 2 1]]
我们只是遍历输入列表并对当前(包括)左侧的所有元素进行 bincount。
import numpy as np
n = 3
a = np.array([1, 0, 1, 2])
out = []
for i in range(a.shape[0]):
out.append(np.bincount(a[:i+1], minlength=n))
out = np.array(out)
有什么办法可以加快速度吗?我想知道是否有可能完全摆脱该循环并仅使用矩阵魔法。
编辑: 谢谢,lbragile,提到列表推导。这不是我的意思。 (我不确定它是否渐近显着)。我正在考虑一些更复杂的事情,例如根据 bincount 操作在后台的工作方式重写它。
【问题讨论】:
-
你能再解释一下转换吗?我不确定我是否理解正确。
-
我同意 Alexander,您对转换的解释不清楚,因此如果我们不知道要优化什么,我们将无法帮助您优化。另外,您的代码运行不正常,除非您将 append() 作为定义的函数,否则它不应接受任何参数。
-
在任何情况下,您始终可以使用列表推导而不是 for 循环进行优化。
标签: python numpy decision-tree