首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用numpy花式索引和分配?

禁用numpy花式索引和分配?
EN

Stack Overflow用户
提问于 2012-03-28 15:53:06
回答 1查看 228关注 0票数 2

This post识别了一个我想禁用的“特性”。

当前的粗野行为:

代码语言:javascript
复制
>>> a = arange(10)
>>> a[a>5] = arange(10)
array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3])

问题的原因是:假设我希望一个数组在断点的两边有两个不同的值集(例如,用于创建一个“破坏幂律”或其他一些简单的分段函数)。我可能会不小心做这样的事:

代码语言:javascript
复制
>>> x = empty(10)
>>> a = arange(10)
>>> x[a<=5] = 0 # this is fine
>>> x[a>5] = a**2 # this is not
# but what I really meant is this
>>> x[a>5] = a[a>5]**2 

第一种行为,x[a>5] = a**2产生了一些我认为有违直觉的东西--左侧和右侧形状不一致,右侧不是标量,但numpy允许我完成这个任务。正如另一篇文章所指出的,x[5:]=a**2是不允许的。

那么,我的问题是:有没有办法让x[a>5] = a**2提高Exception而不是执行任务?我非常担心我的代码中隐藏了排字,因为我以前从未怀疑过这种行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-28 16:04:33

我不知道有什么方法可以直接禁用核心的numpy功能。您可以尝试使用np.select来代替禁用行为:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html

代码语言:javascript
复制
In [110]: x = np.empty(10)
In [111]: a = np.arange(10)
In [112]: x[a<=5] = 0
In [113]: x[a>5] = a**2
In [114]: x
Out[114]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  4.,  9.])

In [117]: condlist = [a<=5,a>5]
In [119]: choicelist=[0,a**2]
In [120]: x = np.select(condlist,choicelist)
In [121]: x
Out[121]: array([ 0,  0,  0,  0,  0,  0, 36, 49, 64, 81])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9911265

复制
相关文章

相似问题

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