第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Numpy:np.abs 實際上是如何工作的?

Numpy:np.abs 實際上是如何工作的?

Go
江戶川亂折騰 2023-06-12 14:35:15
我正在嘗試在 Go 中為 gonum 密集向量實現(xiàn)我自己的絕對函數(shù)。我在想是否有比先平方再平方根更好的方法來獲取數(shù)組的絕對值?我的主要問題是我必須在這些向量上實現(xiàn)我自己的元素明智的牛頓平方根函數(shù),并且在實現(xiàn)速度和準(zhǔn)確性之間存在平衡。如果我能避免使用這個平方根函數(shù),我會很高興。
查看完整描述

1 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊

NumPy 源代碼可能很難瀏覽,因為它具有適用于多種數(shù)據(jù)類型的多種功能。您可以在文件中找到絕對值函數(shù)的 C 級源代碼scalarmath.c.src。該文件實際上是一個帶有函數(shù)定義的模板,構(gòu)建系統(tǒng)稍后會為多種數(shù)據(jù)類型復(fù)制這些函數(shù)定義。請注意,每個函數(shù)都是為數(shù)組的每個元素運行的“內(nèi)核”(循環(huán)遍歷數(shù)組是在其他地方完成的)。這些函數(shù)總是被稱為<name of the type>_ctype_absolute,其中<name of the type>是它適用的數(shù)據(jù)類型并且通常是模板化的。讓我們通過它們。

/**begin repeat

?* #name = ubyte, ushort, uint, ulong, ulonglong#

?*/


#define @name@_ctype_absolute @name@_ctype_positive


/**end repeat**/

這個是針對無符號類型的。在這種情況下,絕對值與 相同np.positive,它只是復(fù)制值而不做任何事情(如果你有一個數(shù)組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**/

這個用于有符號整數(shù)。非常簡單。


/**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_fabsnpy_fabsl函數(shù)被使用。這些在 中聲明npy_math.h,但通過模板化的 C 代碼在 中定義npy_math_internal.h.src,本質(zhì)上調(diào)用C/C99 對應(yīng)項(除非 C99 不可用,在這種情況下fabsffabsl用 模擬fabs)。您可能認(rèn)為前面的代碼應(yīng)該也適用于浮點類型,但實際上這些更復(fù)雜,因為它們有 NaN、無窮大或帶符號的零之類的東西,所以最好使用處理所有問題的標(biāo)準(zhǔn) C 函數(shù)可靠地。

static void

half_ctype_absolute(npy_half a, npy_half *out)

{

? ? *out = a&0x7fffu;

}

這實際上不是模板化的,它是半精度浮點值的絕對值函數(shù)。原來你可以通過按位運算(將第一位設(shè)置為 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**/

最后一個用于復(fù)雜類型。這些使用npy_cabsfnpycabs函數(shù)npy_cabsl,再次在中聲明,但在本例中使用C99 函數(shù)npy_math.h進(jìn)行模板實現(xiàn)(除非該函數(shù)不可用,在這種情況下,它是用模擬的)。npy_math_complex.c.srcnp.hypot


查看完整回答
反對 回復(fù) 2023-06-12
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號