python自定义函数求方差_numpy教程:数学函数和基本统计函数

比较和布尔运算

使用“==”、“>”等比较运算符对两个数组进行比较,将返回一个布尔数组,它的每个元素值都是两个数组对应元素的比较结果。例如:

>>>np.array([1,2,3]) < np.array([3,2,1])

array([ True, False, False], dtype=bool)

每个比较运算符也与一个ufunc函数对应,下面是比较运算符和其ufunc函数的对照表:

y = x1 == x2

equal(x1, x2 [, y])

y = x1 != x2

not_equal(x1, x2 [, y])

y = x1 < x2

less(x1, x2, [, y])

y = x1 <= x2

less_equal(x1, x2, [, y])

y = x1 > x2

greater(x1, x2, [, y])

y = x1 >= x2

greater_equal(x1, x2, [, y])

由于Python中的布尔运算使用and、or和not等关键字,它们无法被重载,因此数组的布尔运算只能通过相应的ufunc函数进行。这些函数名都以“logical_”开头,在IPython中使用自动补全可以很容易地找到它们:

>>>np.logical # 按Tab进行自动补全

np.logical_and np.logical_not np.logical_or np.logical_xor

下面是一个使用logical_or()进行或运算的例子:

>>>a = np.arange(5)

>>>b = np.arange(4,-1,-1)

>>>a == b

array([False, False, True, False, False], dtype=bool)

>>>a > b

array([False, False, False, True, True], dtype=bool)

>>>np.logical_or(a==b, a>b) # 和 a>=b 相同

array([False, False, True, True, True], dtype=bool)

对两个布尔数组使用and、or和not等进行布尔运算,将抛出ValueError异常。因为布尔数组中有True也有False,NumPy无法确定用户的运算目的:

>>>a==b and a>b

ValueError: The truth value of an array with more than one

element is ambiguous. Use a.any() or a.all()

错误信息告诉我们可以使用数组的any()或all()方法[1]。只要数组中有一个值为True,则any()返回True;而只有数组的全部元素都为True,all()才返回True。

>>>np.any(a==b)

True

>>>np.any(a==b) and np.any(a>b)

True

以“bitwise_”开头的函数是比特运算函数,包括bitwise_and、bitwise_not、bitwise_or和bitwise_xor等。也可以使用”&”、”~”、”|”和”^”等操作符进行计算。

对于布尔数组来说,比特运算和布尔运算的结果相同。但在使用时要注意,比特运算符的优先级比比较运算符高,因此需要使用括号提高比较运算的运算优先级。例如:

>>>(a==b) | (a>b)

array([False, False, True, True, True], dtype=bool)

整数数组的比特运算和C语言的比特运算相同,在使用时要注意元素类型的符号,例如下面的arange()所创建的数组的元素类型为32位符号整数,因此对正数按位取反将得到负数。以整数0为例,按位取反的结果是0xFFFFFFFF,在32位符号整数中,这个值表示-1。

>>>~np.arange(5)

array([-1, -2, -3, -4, -5])

而如果对8位无符号整数数组进行比特取反运算:

>>>~np.arange(5, dtype=np.uint8)

array([255, 254, 253, 252, 251], dtype=uint8)

同样的整数0,按位取反的结果是0xFF,当它是8位无符号整数时,它的值是255。

Note:在NumPy中同时也定义了any()和all()函数。[numpy教程:逻辑函数Logic functions]

皮皮blog

numpy多维矩阵求和、平均值、中位数、方差

求和np.sum()

指定和的变量/精度类型

sum()默认使用和数组的元素类型相同的累加变量进行计算,如果元素类型为整数,就使 用系统的默认整数类型作为累加变量。在32位系统中,累加变量的类型为32 bit整型。因此对整数数组进行累加时可能会出现溢出问题;而对很大的单精度浮点数类型数组进行计算时,也可能出现精度不够的现象,这时可以通过dtype 参数指定累加变量的类型。

>>> b =np.ones(1000000, dtype=np.float32) * 1.1  # 创建一个很大的单精度浮点数数组

>>> b       # 1.1无法使用浮点数精示,存在一些误差

array([ 1.10000002, 1.10000002,…,1.10000002], dtype=float32)

>>> np.sum(b)   #使用单精度累加变量进行累加计算,误差将越来越大

1110920.5

>>>np.sum(b, dtype=np.double) #使用双精度浮点数则能够得到正确的值

1100000.0238418579

指定axis参数

求和运算将沿着指定的轴进行,可进行行和、列和运算。即,结果数组的形状是原始数组的形状除去其第axis个元素。也就是如果对0轴求和,0轴的维度就从n变成1了。

>>> np.sum(a,axis=1)

array([26, 19, 30, 22])

>>> np.sum(a, axis=0)

array([30, 15, 22, 25, 5])

data1 =random.randint(1, 10, (2, 3))

[[6 8 6]

[4 8 1]]s

=

sum(data1) #不同于numpy,python函数是直接对0轴计算列和;等价于

numpy.sum(data1,

axis

=

0) 留下行(axis = 0)

print(s)[10 16  7]

s

=numpy.sum(data1,

axis

=

1) #计算行和

print(s)[20 13]

s =numpy.sum(data1) #计算所有元素和

print(s)

47

求均值np.mean()

对于整数数组,它使用双精度浮点数进行计算,而对于其他类型的数组,则使用和数组元素类型相同的累加变量进行计算,如单精度浮点数使用单精度浮点数进行计算。

average()也可以对数组进行平均计算。它没有out和dtype参数,但有一个指定每个元素权值的weights参数。

用median()可以获得数组的中值。

求标准差和方差std()和var()分别计算数组的标准差和方差,有axis、out及dtype等参数。

[ numpy教程 - 统计函数]

皮皮blog

自定义ufunc函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值