- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试在 Go 中为 gonum 密集向量实现我自己的绝对函数。我在想是否有比先平方再平方根更好的方法来获取数组的绝对值?
我的主要问题是,我必须在这些向量上实现我自己的元素明智的牛顿平方根函数,并且实现速度和准确性之间存在平衡。如果我可以避免使用这个平方根函数,我会很高兴。
最佳答案
NumPy 源代码可能很难浏览,因为它具有适用于多种数据类型的多种功能。您可以在文件 scalarmath.c.src
中找到绝对值函数的 C 级源代码。 .该文件实际上是一个带有函数定义的模板,构建系统稍后会为多种数据类型复制这些函数定义。请注意,每个函数都是为数组的每个元素运行的“内核”(循环遍历数组是在其他地方完成的)。这些函数总是被称为 <name of the type>_ctype_absolute
, 其中<name of the type>
是它适用的数据类型,通常是模板化的。让我们来看看它们。
/**begin repeat
* #name = ubyte, ushort, uint, ulong, ulonglong#
*/
#define @name@_ctype_absolute @name@_ctype_positive
/**end repeat**/
这个是针对无符号类型的。在这种情况下,绝对值与 np.positive
相同,它只是复制值而不做任何事情(如果你有一个数组 a
而你做 +a
,这就是你得到的)。
/**begin repeat
* #name = byte, short, int, long, longlong#
* #type = npy_byte, npy_short, npy_int, npy_long, npy_longlong#
*/
static void
@name@_ctype_absolute(@type@ a, @type@ *out)
{
*out = (a < 0 ? -a : a);
}
/**end repeat**/
这个用于有符号整数。非常简单。
/**begin repeat
* #name = float, double, longdouble#
* #type = npy_float, npy_double, npy_longdouble#
* #c = f,,l#
*/
static void
@name@_ctype_absolute(@type@ a, @type@ *out)
{
*out = npy_fabs@c@(a);
}
/**end repeat**/
这是针对浮点值的。这里npy_fabsf
, npy_fabs
和 npy_fabsl
使用函数。这些在 npy_math.h
中声明, 但通过 npy_math_internal.h.src
中的模板化 C 代码定义,本质上是调用 C/C99 counterparts (除非 C99 不可用,in which case fabsf
and fabsl
are emulated with fabs
)。您可能认为前面的代码应该也适用于浮点类型,但实际上这些更复杂,因为它们有 NaN、无穷大或带符号的零之类的东西,所以最好使用处理所有问题的标准 C 函数可靠。
static void
half_ctype_absolute(npy_half a, npy_half *out)
{
*out = a&0x7fffu;
}
这其实不是模板化的,它是half-precision floating-point values的绝对值函数.原来你可以通过按位运算(将第一位设置为 0)来更改符号,因为半精度比其他浮点类型更简单(如果更有限)(对于那些通常是相同的,但有特殊情况).
/**begin repeat
* #name = cfloat, cdouble, clongdouble#
* #type = npy_cfloat, npy_cdouble, npy_clongdouble#
* #rtype = npy_float, npy_double, npy_longdouble#
* #c = f,,l#
*/
static void
@name@_ctype_absolute(@type@ a, @rtype@ *out)
{
*out = npy_cabs@c@(a);
}
/**end repeat**/
最后一个是针对复杂类型的。这些使用 npy_cabsf
, npycabs
和 npy_cabsl
函数,再次在 npy_math.h
中声明但在这种情况下,模板在 npy_math_complex.c.src
中实现使用 C99 functions (除非它不可用,在这种情况下它是 emulated with np.hypot
)。
关于Numpy:np.abs 实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54882191/
如果你有一个字符串,假设:AB--AB .我想寻找带有 xpath 的节点,它可以是 AB??AB , 这意味着节点属性中的问号是某种占位符 - 它们的出现次数可能会有所不同,因此它也应该匹配到 AB
我的python版本是2.7.6 我知道 +? 是 + 的非贪婪版本。 这样 re.findall('(ab)+?', 'abab') 将匹配尽可能少的 ab。 结果 ['ab', 'ab'] 因此有
typedef struct unit { struct unit * next; int year; int month; int day; struct unit revisions[3]; ch
特别是 Sql Server 2005/T-Sql。我有一个主要由两个字符组成的字段,它们都应该是大写的,但是有一些遗留数据早于当前的数据库/系统,我需要弄清楚哪些记录违反了大写套管契约。 我认为这会
在 python 中有什么区别: abs(a) 和 operator.abs(a) 它们非常相似,工作方式也相似。如果它们完全相同,那么为什么要制作两个独立的函数来做同样的事情? 如果其中任何一个有一
小心,我说的是::abs() ,而不是 std::abs() 根据cplusplus.com website , abs stdlib. 的行为应该不同h C 版本,如果包含 这是此页面的摘录(涉及
假设我们有数字 81,我们将它分开:8 和 1。如果我们得到这个数字的总和,它将是 9,对吧?让我们检查一下 9 的任意幂是否为 81。是的,9 的平方为 81。 我想找到所有这些数字,直到达到 10
我在postgresql有点情况 我有两个表 t1 和 t2,并且都有一个列具有相同类型的数据“col_data”,col_data 可能只有以下数据 ('ab', 'cd', 'ab,cd', 'c
这个问题在这里已经有了答案: Can we instantiate an abstract class? (16 个答案) 关闭 9 年前。 我有一个关于抽象类的问题。 首先......我正在使用谷
我的问题听起来可能很愚蠢,但我必须在准备学士考试时回答这个问题。 那么,您如何看待 C++ 中的表达式 'ab' == "ab"?这不是真的还是根本不合法和编译错误?我在谷歌上搜索了一下,了解到“ab
我有一个表格,其中填充了某些值,例如 | CODE | NAME | NB: THIS IS A VERY BASIC EXAMPLE | zygnc | oscar alpha |
This question already has answers here: Reference - What does this regex mean?
我正在检查 TypeScript 规范并在某个时间点查看 3.4 Union Types它使用 AB 如下: 一个 |如果 B 是 A 的子类型,则 B 等同于 A。 一个 | B 等同于 B | A
这个问题在这里已经有了答案: What is the difference between .*? and .* regular expressions? (3 个答案) 关闭 7 年前。 +? 匹
下面是我遇到问题的代码。 avg += abs(num) 行有错误,但我无法解决。错误代码: error: call of overloaded 'abs(double&)' is ambigous
我有一个 Java 方法,它在一个非常紧凑的循环中重复计算以下表达式,并有大量重复: Math.abs(a - b) - Math.abs(c - d) a、b、c 和 d 是 long 值,可以跨越
我有一个 .bin 文件,我想对十六进制数据进行简单的字节反转。例如说 @ 0x10 它读取 AD DE DE C0,希望它读取 DE AD C0 DE。 我知道有一种简单的方法可以做到这一点,但我是
我目前正在用 C++ 编写一些类似于 vector 数学类的 glsl,并且我刚刚实现了一个 abs() 函数,如下所示: template static inline T abs(T _a) {
我正在尝试 ab 测试旋风。 当我跑 ab -n 2000 -c 25 http://127.0.0.1 我得到 ab:无效的 URL。 嗯...当我在我的开发机器上访问 ff 时,该站点就在那里。
我有一个 Swift 文件,我在其中导入了 Foundation 和 CoreGraphics,但是在我调用 abs(x) 的地方,其中 x 是一个 CGFloat,我收到此警告: abs is de
我是一名优秀的程序员,十分优秀!