小编Kes*_*sel的帖子

numpy-1.13 ufuncs 中的“where”子句

我偶尔会where在 numpy 的 ufunc 中使用该子句。例如,以下内容:

import numpy as np
a = np.linspace(-1, 1, 10)
np.sqrt(a, where=a>0) * (a>0)
Run Code Online (Sandbox Code Playgroud)

在 Numpy 1.12 及更早版本中,这曾经在可能的情况下给我平方根值,否则为零。

不过,最近我升级到 numpy 1.13。上面的代码现在给了我以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Automatic allocation was requested for an iterator operand, and it was flagged as readable, but buffering  without delayed allocation was enabled
Run Code Online (Sandbox Code Playgroud)

我认为这正是该where条款应该使用的方式,但也许我错了。所以我有两个问题:第一,这段代码有什么问题;其次,实现我的目标的推荐方法是什么?

python numpy numpy-ufunc

5
推荐指数
1
解决办法
349
查看次数

__saturatef() 内在函数没有双精度等效项

Cuda 支持内在函数。有些映射到设备指令,例如融合乘法加法,无法用正常语法表示。其他函数是近似值,应该比“标准”函数更快(尽管可能不太准确)。

似乎后一种类型的内在函数不支持双精度参数,而仅支持单精度浮点数。这是有道理的:如果您使用双打,那么根据定义,您对准确性而不是速度感兴趣。

然而,令我惊讶的是,__saturatef()将其参数限制在 0 和 1 之间的内在函数没有双精度版本。

__saturatef()如果我在简单的实现中使用内在函数,是否会有任何潜在的数据丢失?如果是这样,有人知道这个内在是如何工作的吗?如果不是,为什么 nvidia 会忽略双精度版本?

cuda

0
推荐指数
1
解决办法
1095
查看次数

标签 统计

cuda ×1

numpy ×1

numpy-ufunc ×1

python ×1