1)線性歸一化
目前成都創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、源城網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
這種歸一化比較適用在數(shù)值比較集中的情況,缺陷就是如果max和min不穩(wěn)定,很容易使得歸一化結(jié)果不穩(wěn)定,使得后續(xù)的效果不穩(wěn)定,實(shí)際使用中可以用經(jīng)驗(yàn)常量來(lái)代替max和min。
2)標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化
經(jīng)過(guò)處理的數(shù)據(jù)符合標(biāo)準(zhǔn)正態(tài)分布,即均值為0,標(biāo)準(zhǔn)差為1。
3)非線性歸一化
經(jīng)常用在數(shù)據(jù)分化較大的場(chǎng)景,有些數(shù)值大,有些很小。通過(guò)一些數(shù)學(xué)函數(shù),將原始值進(jìn)行映射。該方法包括log、指數(shù)、反正切等。需要根據(jù)數(shù)據(jù)分布的情況,決定非線性函數(shù)的曲線。
log函數(shù):x = lg(x)/lg(max)
反正切函數(shù):x = atan(x)*2/pi
Python實(shí)現(xiàn)
線性歸一化
定義數(shù)組:x = numpy.array(x)
獲取二維數(shù)組列方向的最大值:x.max(axis = 0)
獲取二維數(shù)組列方向的最小值:x.min(axis = 0)
對(duì)二維數(shù)組進(jìn)行線性歸一化:
def max_min_normalization(data_value, data_col_max_values, data_col_min_values):
""" Data normalization using max value and min value
Args:
data_value: The data to be normalized
data_col_max_values: The maximum value of data's columns
data_col_min_values: The minimum value of data's columns
"""
data_shape = data_value.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
for j in xrange(0, data_cols, 1):
data_value[i][j] = \
(data_value[i][j] - data_col_min_values[j]) / \
(data_col_max_values[j] - data_col_min_values[j])
標(biāo)準(zhǔn)差歸一化
定義數(shù)組:x = numpy.array(x)
獲取二維數(shù)組列方向的均值:x.mean(axis = 0)
獲取二維數(shù)組列方向的標(biāo)準(zhǔn)差:x.std(axis = 0)
對(duì)二維數(shù)組進(jìn)行標(biāo)準(zhǔn)差歸一化:
def standard_deviation_normalization(data_value, data_col_means,
data_col_standard_deviation):
""" Data normalization using standard deviation
Args:
data_value: The data to be normalized
data_col_means: The means of data's columns
data_col_standard_deviation: The variance of data's columns
"""
data_shape = data_value.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
for j in xrange(0, data_cols, 1):
data_value[i][j] = \
(data_value[i][j] - data_col_means[j]) / \
data_col_standard_deviation[j]
非線性歸一化(以lg為例)
定義數(shù)組:x = numpy.array(x)
獲取二維數(shù)組列方向的最大值:x.max(axis=0)
獲取二維數(shù)組每個(gè)元素的lg值:numpy.log10(x)
獲取二維數(shù)組列方向的最大值的lg值:numpy.log10(x.max(axis=0))
對(duì)二維數(shù)組使用lg進(jìn)行非線性歸一化:
def nonlinearity_normalization_lg(data_value_after_lg,
data_col_max_values_after_lg):
""" Data normalization using lg
Args:
data_value_after_lg: The data to be normalized
data_col_max_values_after_lg: The maximum value of data's columns
"""
data_shape = data_value_after_lg.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
for j in xrange(0, data_cols, 1):
data_value_after_lg[i][j] = \
data_value_after_lg[i][j] / data_col_max_values_after_lg[j]
計(jì)算器上一般用shift鍵,再按的tan輸入,就是tan的負(fù)一次方的。
計(jì)算機(jī)先選科學(xué)型,然后在度與弧度下面有個(gè)inv鍵,按了它后就有tan-1次方,就是arctan的意思,arctan是正切的反函數(shù),計(jì)算器上一般用shift鍵加tan鍵,就是tan的負(fù)一次方的那個(gè)。
科學(xué)型計(jì)算器一般都可以計(jì)算,常見(jiàn)的有夏普計(jì)算器、卡西歐計(jì)算器、得力計(jì)算器。arctan也可以寫(xiě)作arctg,是反正切函數(shù),你看看計(jì)算機(jī)上有沒(méi)有arctan或者arc^-1注意各個(gè)鍵位上的標(biāo)示以及該鍵位所對(duì)應(yīng)的功能鍵標(biāo)示,有些功能要先按shift鍵、alpha等功能。
先來(lái)看一下 math 模塊中包含內(nèi)容,如下所示:
接下來(lái)具體看一下該模塊的常用函數(shù)和常量。
ceil(x)
返回 x 的上限,即大于或者等于 x 的最小整數(shù)。看下示例:
floor(x)
返回 x 的向下取整,小于或等于 x 的最大整數(shù)??聪率纠?/p>
fabs(x)
返回 x 的絕對(duì)值??聪率纠?/p>
fmod(x, y)
返回 x/y 的余數(shù),值為浮點(diǎn)數(shù)??聪率纠?/p>
factorial(x)
返回 x 的階乘,如果 x 不是整數(shù)或?yàn)樨?fù)數(shù)時(shí)則將引發(fā) ValueError??聪率纠?/p>
pow(x, y)
返回 x 的 y 次冪。看下示例:
fsum(iterable)
返回迭代器中所有元素的和。看下示例:
gcd(x, y)
返回整數(shù) x 和 y 的最大公約數(shù)。看下示例:
sqrt(x)
返回 x 的平方根。看下示例:
trunc(x)
返回 x 的整數(shù)部分。看下示例:
exp(x)
返回 e 的 x 次冪??聪率纠?/p>
log(x[, base])
返回 x 的對(duì)數(shù),底數(shù)默認(rèn)為 e??聪率纠?/p>
常量
tan(x)
返回 x 弧度的正切值??聪率纠?/p>
atan(x)
返回 x 的反正切值??聪率纠?/p>
sin(x)
返回 x 弧度的正弦值??聪率纠?/p>
asin(x)
返回 x 的反正弦值。看下示例:
cos(x)
返回 x 弧度的余弦值??聪率纠?/p>
acos(x)
返回 x 的反余弦值??聪率纠?/p>
decimal 模塊為正確舍入十進(jìn)制浮點(diǎn)運(yùn)算提供了支持,相比內(nèi)置的浮點(diǎn)類型 float,它能更加精確的控制精度,能夠?yàn)榫纫筝^高的金融等領(lǐng)域提供支持。
decimal 在一個(gè)獨(dú)立的 context 下工作,可以使用 getcontext() 查看當(dāng)前上下文,如下所示:
從上面的結(jié)果中我們可以看到 prec=28,這就是默認(rèn)的精度,我們可以使用 getcontext().prec = xxx 來(lái)重新設(shè)置精度。接下來(lái)通過(guò)具體示例看一下。
基本運(yùn)算
執(zhí)行結(jié)果:
上面結(jié)果是用了默認(rèn)精度,我們重新設(shè)置下精度再來(lái)看一下:
執(zhí)行結(jié)果:
random 模塊可以生成隨機(jī)數(shù),我們來(lái)看一下其常用函數(shù)。
random()
返回 [0.0, 1.0) 范圍內(nèi)的一個(gè)隨機(jī)浮點(diǎn)數(shù)??聪率纠?/p>
uniform(a, b)
返回 [a, b) 范圍內(nèi)的一個(gè)隨機(jī)浮點(diǎn)數(shù)??聪率纠?/p>
randint(a, b)
返回 [a, b] 范圍內(nèi)的一個(gè)隨機(jī)整數(shù)??聪率纠?/p>
randrange(start, stop[, step])
返回 [start, stop) 范圍內(nèi)步長(zhǎng)為 step 的一個(gè)隨機(jī)整數(shù)。看下示例:
choice(seq)
從非空序列 seq 返回一個(gè)隨機(jī)元素。 看下示例:
shuffle(x[, random])
將序列 x 隨機(jī)打亂位置??聪率纠?/p>
sample(population, k)
返回從總體序列或集合中選擇的唯一元素的 k 長(zhǎng)度列表,用于無(wú)重復(fù)的隨機(jī)抽樣。看下示例:
參考:
Python math 庫(kù)提供許多對(duì)浮點(diǎn)數(shù)的數(shù)學(xué)運(yùn)算函數(shù),math模塊不支持復(fù)數(shù)運(yùn)算,若需計(jì)算復(fù)數(shù),可使用cmath模塊(本文不贅述)。
使用dir函數(shù),查看math庫(kù)中包含的所有內(nèi)容:
1) math.pi????# 圓周率π
2) math.e????#自然對(duì)數(shù)底數(shù)
3) math.inf? ? #正無(wú)窮大∞,-math.inf? ? #負(fù)無(wú)窮大-∞
4) math.nan? ? #非浮點(diǎn)數(shù)標(biāo)記,NaN(not a number)
1) math.fabs(x)? ? #表示X值的絕對(duì)值
2) math.fmod(x,y)? ? #表示x/y的余數(shù),結(jié)果為浮點(diǎn)數(shù)
3) math.fsum([x,y,z])? ? #對(duì)括號(hào)內(nèi)每個(gè)元素求和,其值為浮點(diǎn)數(shù)
4) math.ceil(x)? ? #向上取整,返回不小于x的最小整數(shù)
5)math.floor(x)? ? #向下取整,返回不大于x的最大整數(shù)
6) math.factorial(x)? ? #表示X的階乘,其中X值必須為整型,否則報(bào)錯(cuò)
7) math.gcd(a,b)? ? #表示a,b的最大公約數(shù)
8)? math.frexp(x)? ? ? #x = i *2^j,返回(i,j)
9) math.ldexp(x,i)? ? #返回x*2^i的運(yùn)算值,為math.frexp(x)函數(shù)的反運(yùn)算
10) math.modf(x)? ? #表示x的小數(shù)和整數(shù)部分
11) math.trunc(x)? ? #表示x值的整數(shù)部分
12) math.copysign(x,y)? ? #表示用數(shù)值y的正負(fù)號(hào),替換x值的正負(fù)號(hào)
13) math.isclose(a,b,rel_tol =x,abs_tol = y)? ? #表示a,b的相似性,真值返回True,否則False;rel_tol是相對(duì)公差:表示a,b之間允許的最大差值,abs_tol是最小絕對(duì)公差,對(duì)比較接近于0有用,abs_tol必須至少為0。
14) math.isfinite(x)? ? #表示當(dāng)x不為無(wú)窮大時(shí),返回True,否則返回False
15) math.isinf(x)? ? #當(dāng)x為±∞時(shí),返回True,否則返回False
16) math.isnan(x)? ? #當(dāng)x是NaN,返回True,否則返回False
1) math.pow(x,y)? ? #表示x的y次冪
2) math.exp(x)? ? #表示e的x次冪
3) math.expm1(x)? ? #表示e的x次冪減1
4) math.sqrt(x)? ? #表示x的平方根
5) math.log(x,base)? ? #表示x的對(duì)數(shù)值,僅輸入x值時(shí),表示ln(x)函數(shù)
6) math.log1p(x)? ? #表示1+x的自然對(duì)數(shù)值
7) math.log2(x)? ? #表示以2為底的x對(duì)數(shù)值
8) math.log10(x)? ? #表示以10為底的x的對(duì)數(shù)值
1) math.degrees(x)? ? #表示弧度值轉(zhuǎn)角度值
2) math.radians(x)? ? #表示角度值轉(zhuǎn)弧度值
3) math.hypot(x,y)? ? #表示(x,y)坐標(biāo)到原點(diǎn)(0,0)的距離
4) math.sin(x)? ? #表示x的正弦函數(shù)值
5) math.cos(x)? ? #表示x的余弦函數(shù)值
6) math.tan(x)? ? #表示x的正切函數(shù)值
7)math.asin(x)? ? #表示x的反正弦函數(shù)值
8)?math.acos(x)? ? #表示x的反余弦函數(shù)值
9)?math.atan(x)? ? #表示x的反正切函數(shù)值
10) math.atan2(y,x)? ? #表示y/x的反正切函數(shù)值
11) math.sinh(x)? ? #表示x的雙曲正弦函數(shù)值
12) math.cosh(x)? ? #表示x的雙曲余弦函數(shù)值
13) math.tanh(x)? ? #表示x的雙曲正切函數(shù)值
14) math.asinh(x)? ? #表示x的反雙曲正弦函數(shù)值
15) math.acosh(x)? ? #表示x的反雙曲余弦函數(shù)值
16) math.atanh(x)? ? #表示x的反雙曲正切函數(shù)值
1)math.erf(x)? ? #高斯誤差函數(shù)
2) math.erfc(x)? ? #余補(bǔ)高斯誤差函數(shù)
3) math.gamma(x)? ? #伽馬函數(shù)(歐拉第二積分函數(shù))
4) math.lgamma(x)? ? #伽馬函數(shù)的自然對(duì)數(shù)
對(duì)于平面坐標(biāo)系,任一射線OP與x軸夾角 θ 的范圍,可以取[0,2π)或者(-π,π],如無(wú)特殊說(shuō)明, 我們統(tǒng)一使用后者。
將笛卡爾空間坐標(biāo)系中的點(diǎn) Pc = ( x , y , z ) 表示成球體坐標(biāo)系中的形式 Ps = ( θ , ? , r ) 。
atan2(b,a)是4象限反正切,它的取值不僅取決于正切值b/a,還取決于點(diǎn)(b,a) 落入哪個(gè)象限:
而 atan(b/a) 僅僅根據(jù)正切值為a/b求出對(duì)應(yīng)的角度 (可以看作僅僅是2象限反正切):
結(jié)論: atan 和 atan2函數(shù),建議用 atan2函數(shù)
參考文章:
在python中,有一個(gè)math module,你可以import math,里面有math.sin(), math.cos(), math.asin()和math.acos()四個(gè)函數(shù)。相信你也知道asin和acos的意思,就是arcsin和arccos。有了這四個(gè)函數(shù)你就可以求函數(shù)值和角度了。但是要注意括號(hào)里面填的數(shù)值,要用弧度制。