我试图将一些元素计算向量化,但在没有创建本地信息到全局信息的列表理解的情况下很难做到这一点。有人告诉我,我可以使用逻辑数组完成我想要做的事情,但到目前为止,我发现的示例并没有帮助。虽然是的,我可以通过列表理解来实现这一点,但是速度是我的代码的主要关注点。
我有一组值,表示不应调整的“全局”计算中的指数。
例如,这些“固定”索引是
1 2 6如果我的全局计算有十个元素,我将能够通过创建一个全局索引集的列表并减去固定的指数来设置所有的“空闲”值。
free = list(set(range(len(global)) - set(fixed))
[0, 3, 4, 5, 7, 8, 9]在全局计算中,我可以调整“空闲”元素,如下面的代码片段所示
global = np.ones(10)
global[free] = global[free] * 10其中应产生:
global = [10, 1, 1, 10, 10, 10, 1, 10, 10, 10]我的“局部”计算是全局计算的子集,其中局部映射表示全局计算中相应的索引。
local_map = [4, 2, 1, 8, 6]
local_values = [40, 40, 40, 40, 40]但我需要与本地地图相关联的值来保留它们的顺序,以便进行计算。
在地方一级相当于全球自由的是什么?所需的输出如下所示:
local_free = list(set(range(len(local)) - set(fixed))
local_values[local_free] *= 10
OUTPUT: local_values = [400, 40, 40, 400, 40]如果问题格式被关闭,代码块格式在我的浏览器中似乎不起作用,我很抱歉,所以如果您需要澄清,请告诉我。
发布于 2016-10-20 11:15:46
对于这种与比较相关的操作,NumPy有np.setdiff1d和np.in1d等工具。为了解决我们的案子,这两件事就足够了。我假设输入是NumPy数组,因为那时我们可以使用NumPy支持的向量化索引方法。
关于第一个案子,我们有-
In [97]: fixed = np.array([1,2,6])
...: global_arr = np.array([10, 1, 1, 10, 10, 10, 1, 10, 10, 10])
...: 为了在list(set(range(len(global_arr)) - set(fixed))中得到NumPy的等价物,我们可以使用np.setdiff1d -
In [98]: np.setdiff1d(np.arange(len(global_arr)),fixed)
Out[98]: array([0, 3, 4, 5, 7, 8, 9])下一个,我们有-
In [99]: local_map = np.array([4, 2, 1, 8, 6])
...: local_values = np.array([42, 40, 48, 41, 43])
...: 我们试着让-
local_free = list(set(range(len(local)) - set(fixed))
local_values[local_free] *= 10在这里,我们可以使用np.in1d获得一个与local_free等价的掩码,它可以用NumPy的boolean-indexing方法来索引和赋值给local_values -
In [100]: local_free = ~np.in1d(local_map,fixed)
...: local_values[local_free] *= 10
...:
In [101]: local_values
Out[101]: array([420, 40, 48, 410, 43])https://stackoverflow.com/questions/40152372
复制相似问题