如何编写与纯Python值和NumPy数组兼容的条件代码?

到处走走

为了用Python编写“分段函数”,我通常会使用if(以控制流或三元运算符的形式)。

def spam(x):
    return x+1 if x>=0 else 1/(1-x)

现在,使用NumPy的口头禅是避免对单个值进行处理,而倾向于矢量化以提高性能。因此,我认为这样的选择将是更可取的:正如莱昂所说,以下错误

def eggs(x):
    y = np.zeros_like(x)
    positive = x>=0
    y[positive] = x+1
    y[np.logical_not(positive)] = 1/(1-x)
    return y

(如果我错过了这里的内容,请纠正我,因为坦率地说,我觉得这很丑。)

现在,当然eggs只有当工作x实际上是一个NumPy的阵列,否则x>=0只是产生一个布尔值,它不能被用于索引(至少不会做正确的事)。

有没有一种好的方法来编写看起来更像spam但可以在Numpy数组上正常工作的代码,还是我应该使用vectorize(spam)

普拉文

使用np.where但是,即使对于纯数字输入,您也会得到一个数组作为输出。

def eggs(x):
    y = np.asarray(x)
    return np.where(y>=0, y+1, 1/(1-y))

这适用于数组和纯数字:

>>> eggs(5)
array(6.0)
>>> eggs(-3)
array(0.25)
>>> eggs(np.arange(-3, 3))
/home/praveen/.virtualenvs/numpy3-mkl/bin/ipython3:2: RuntimeWarning: divide by zero encountered in true_divide
array([ 0.25      ,  0.33333333,  0.5       ,  1.        ,  2.        ,  3.        ])
>>> eggs(1)
/home/praveen/.virtualenvs/numpy3-mkl/bin/ipython3:3: RuntimeWarning: divide by zero encountered in long_scalars
  # -*- coding: utf-8 -*-
array(2.0)

正如阿伊汉(Ayhan)所说,这引起了警告,因为1/(1-x)对整个范围进行了评估。但是警告仅仅是:警告。如果您知道自己在做什么,则可以忽略该警告。在这种情况下,您仅从1/(1-x)永远不能选择的索引中进行选择inf,因此很安全。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python 2和3之间的numpy数组的Pickle不兼容

Python 2和3之间的numpy数组的Pickle不兼容

如何编写一个算法来在 python 中查找 numpy 数组的特定值

如果需要根据先前的值更新我的值,该如何编写纯函数式代码?

如果条件,如何编写代码以显示和隐藏数据

如何编写与MarkLogic 7和8中的JSON API差异兼容的代码?

仅使用标准库即可编写与Python 2和3兼容的代码的最佳方法

Python:大于和小于值的numpy数组

将python,numpy和scipy代码转换为C ++兼容代码?

根据索引和条件更改numpy数组中的值

NumPy数组中满足值和索引条件的元素的索引

如何编写“步进”值的代码?

在Python 3.6+中与Python 3.3兼容编写代码

如何编写 Python 代码以支持 Windows 和 Linux?

使用__future__还是将来编写与python2和python3兼容的代码是否更可取?

我在 Python 中编写了一个代码来从 5 个元素的数组中找到 4 个元素的最大值和最小值

如何基于模糊条件从Numpy数组中选择值?

如何编写查询以从BigQuery中的python字典插入数组值?

如何使用数组和非数组post变量的混合代码编写Nancy绑定

编写和读取numpy嵌套数组

Python / Numpy我是否已经为大型数组编写了最快的代码?

如何在基于索引而不是值的条件下编写numpy?

如何编写xpath来提取具有属性和值条件的节点值

如何编写单源兼容的Python 2/3代码以从内存字符串写入文本文件

如何在python中使用条件过滤numpy数组

如何使用索引和值迭代一维NumPy数组

如何检测代码是否与python 3兼容

如何在 C# 中使用数组和 DTO 编写漂亮的代码块?

如何编写使用条件和位置的更新