首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的逻辑数组和映射

python中的逻辑数组和映射
EN

Stack Overflow用户
提问于 2016-10-20 10:52:20
回答 1查看 248关注 0票数 2

我试图将一些元素计算向量化,但在没有创建本地信息到全局信息的列表理解的情况下很难做到这一点。有人告诉我,我可以使用逻辑数组完成我想要做的事情,但到目前为止,我发现的示例并没有帮助。虽然是的,我可以通过列表理解来实现这一点,但是速度是我的代码的主要关注点。

我有一组值,表示不应调整的“全局”计算中的指数。

例如,这些“固定”索引是

代码语言:javascript
复制
1 2 6

如果我的全局计算有十个元素,我将能够通过创建一个全局索引集的列表并减去固定的指数来设置所有的“空闲”值。

代码语言:javascript
复制
free = list(set(range(len(global)) - set(fixed))
[0, 3, 4, 5, 7, 8, 9]

在全局计算中,我可以调整“空闲”元素,如下面的代码片段所示

代码语言:javascript
复制
global = np.ones(10)
global[free] = global[free] * 10

其中应产生:

代码语言:javascript
复制
global = [10, 1, 1, 10, 10, 10, 1, 10, 10, 10]

我的“局部”计算是全局计算的子集,其中局部映射表示全局计算中相应的索引。

代码语言:javascript
复制
local_map = [4, 2, 1, 8, 6]
local_values = [40, 40, 40, 40, 40]

但我需要与本地地图相关联的值来保留它们的顺序,以便进行计算。

在地方一级相当于全球自由的是什么?所需的输出如下所示:

代码语言:javascript
复制
local_free = list(set(range(len(local)) - set(fixed))
local_values[local_free] *= 10
OUTPUT: local_values = [400,  40, 40, 400, 40]

如果问题格式被关闭,代码块格式在我的浏览器中似乎不起作用,我很抱歉,所以如果您需要澄清,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-20 11:15:46

对于这种与比较相关的操作,NumPy有np.setdiff1dnp.in1d等工具。为了解决我们的案子,这两件事就足够了。我假设输入是NumPy数组,因为那时我们可以使用NumPy支持的向量化索引方法。

关于第一个案子,我们有-

代码语言:javascript
复制
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 -

代码语言:javascript
复制
In [98]: np.setdiff1d(np.arange(len(global_arr)),fixed)
Out[98]: array([0, 3, 4, 5, 7, 8, 9])

下一个,我们有-

代码语言:javascript
复制
In [99]: local_map = np.array([4, 2, 1, 8, 6])
    ...: local_values = np.array([42, 40, 48, 41, 43])
    ...: 

我们试着让-

代码语言:javascript
复制
local_free = list(set(range(len(local)) - set(fixed))
local_values[local_free] *= 10

在这里,我们可以使用np.in1d获得一个与local_free等价的掩码,它可以用NumPy的boolean-indexing方法来索引和赋值给local_values -

代码语言:javascript
复制
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])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40152372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档