数据分析常用库之numpy之数组的uFanc广播机制

1.特点

(1)uFanc通用函数:能够对array中的左右元素进行操作的函数。
(2)Broadcasting指对不同形状的array之间执行算数运算的方式。
(3)不同形状的数组运算时,Numpy则会执行广播机制
(4)Numpy能够运用向量化运算处理整个数组,所以速度会比较快。

广播运算机制

1.行数补齐:
2.列数补齐:
广播机制原理图注意,执行 broadcast 的前提在于,两个 ndarray 执行的是 element-wise(按位加,按位减) 的运算,而不是矩阵乘法的运算,矩阵乘法运算时需要维度之间严格匹配。(且矩阵乘法,np.dot(A, B) 如果维度不匹配,提示的错误不会是 broadcast,而是 aligned)

arr1 = np.array([[0, 1, 3],[4, 2, 9],[4,5,9],[1,-3,4]])
arr3 = np.array([1,2,3])
arr4 = arr3 + arr1
print(arr4)
[[ 1  3  6]
 [ 5  4 12]
 [ 5  7 12]
 [ 2 -1  7]]

2. 函数运算

Numpy函数运算遵循向量规则,同时进行,因此效率比循环高。
(1)基础数学运算

arr_1 = np.array([2,6,8,3,7,9])
arr_2 = np.array([5,6,4,7,3,2])
arr_3 = np.array([9,7,5,1,8,3])
total = arr_1+arr_2+arr_3
#加法函数
a = np.add(arr_1,arr_2)#两个数组
b = np.add(arr_1,np.add(arr_2,arr_3))#多数组
#减法函数
c = np.subtract(arr_1,arr_2)
print(a,'\n',b,'\n',c)
#除法函数
d = np.divide(arr_1,np.divide(arr_2,100)**2)
#乘法函数
e = np.multiply(arr_1,arr_2)

print(a,'\n',b,'\n',c,'\n',d,'\n',e)
[ 7 12 12 10 10 11] 
 [16 19 17 11 18 14] 
 [-3  0  4 -4  4  7] 
 [  800.          1666.66666667  5000.           612.24489796
  7777.77777778 22500.        ] 
 [10 36 32 21 21 18]


#幂运算
print(np.power(arr_2,3))
[125 216  64 343  27   8]

上述四种函数也可以直接用运算符号表示,此处仅作了解

(2)集合运算


arr_1 = np.array([2,6,2,3,7,9])
test = [2,3 ,8]
#去重并自动排序
a = np.unique(arr_1)
#测试前一个数组中元素在后一个数组中是否存在
b = np.in1d(arr_1, test)
c = np.in1d(test, arr_1)
#求交集
d = np.intersect1d(arr_1,test)
#....并集,补集
print(arr_1,'\n',a,'\n',b,'\n', c,'\n', d)

[2 6 2 3 7 9] #不该变元数组
 [2 3 6 7 9] 
 [ True False  True  True False False] 
 [ True  True False] 
 [2 3]

(3)比较运算

arr_1 = np.array([[1,2,3],[4,5,6]])
arr_2 = np.array([2,7,6])

#广播机制补齐后按位比较
print(arr_1 ==arr_2)
print(np.greater(arr_1,arr_2))
print(arr_1>arr_2)
[[False False False]
 [False False  True]]
[[False False False]
 [ True False False]]
[[False False False]
 [ True False False]]

(4)逻辑运算

arr_2 = np.array([2,7,0])

print(arr_2.any())#任意元素为真,输出True
print(arr_2.all())#所有元素为真,输出True

True
False

3.搜索与排序

import numpy as np
s = np.array([1,3,7,4,9,6,2,6])
a = np.sort(s)#数组排序,默认升序
b = sorted(s)#列表排序,默认升序
c = np.array(sorted(s, reverse = True))#数组排序,reverse参数降序
print(s,a,b,c)
#[1 3 7 4 9 6 2 6]
# [1 2 3 4 6 6 7 9]
# [1, 2, 3, 4, 6, 6, 7, 9]
# [9 7 6 6 4 3 2 1]
d = np.argsort(s)
print(d)
#列表排序,输出为排序后元素对应排序前索引
#[0 6 1 3 5 7 2 4]
p = np.array([[1,2,3],[5,2,9],[4,1,3]])
a1 = p.argmax(axis = 0)#[1 0 1]
b1 = p.argmin(axis = 1)#[0 1 1]
c1 = p.max(axis = 0)#[5 2 9]
d1 = p.min(axis = 1)#[1 2 1]
print(a1,b1,c1,d1)

arr= np.arange(9).reshape(3,3)
a2 = np.where(arr>p, arr, p)#满足条件,返回arr,否则,返回p
#向量化操作,效率高,同时对所有元素进行操作
#[[1 2 3]
#[5 4 9]
#[6 7 8]]
b2 = np.extract(arr>p,arr)
#[4 6 7 8]
#条件化操作,只提取满足条件的元素并输出
print(arr>p)
#[[False False False]
#[False  True False]
#[ True  True  True]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值