Numpy 布尔索引,数组广播

Numpy 布尔索引,数组广播

1.布尔索引

布尔索引也叫逻辑索引我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

代码如下:

import numpy as np
#布尔索引
arr=np.array((1,2,3,4,5))
arr2=np.array((True,False,True,False,True),dtype=np.bool_)
print(arr[arr2]) #[1 3 5] 将arr与arr2每个位置一一对应进行布尔索引 True输出Flase 不输出

注意:

  • (1)arr与arr2的形状要一样
  • (2)一般不会直接创建布尔数组,一般是对某个数组里面的元素进行判断
  • 如下代码:
arr=np.arange(12).reshape(4,3) #reshape()是用来设置数组形状的
arr2=arr>5
'''
arr=[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
'''
print(arr[arr[::,0]>5,2])#[ 8 11] arr[::,0]>5取得在数组所有第0列中的元素大于5的行
# arr[arr[::,0]>5,2] 表示在所满足条件的行中取第二列的元素
print(arr)
print(arr2)
'''
arr2=[[False False False]
 [False False False]
 [ True  True  True]
 [ True  True  True]]
'''
print(arr[arr2]) #[ 6  7  8  9 10 11]

re=np.isnan(np.nan) #np.nan是非数字(也是数字)缺省值
print(np.nan)

2.数组广播

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
代码如下:

a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b  
print (c) #[ 10  40  90 160]
#形状相同时,两个数组每个对应的位置一一进行算数运算操作

如果两个数组形状不相同时,numpy 将自动触发广播机制。

a = np.array([[ 0, 0, 0], [10,10,10],[20,20,20],[30,30,30]])
b = np.array([0,1,2])
print(b.shape) #(3,)
print("a + b=",a+b)
print((a+b).shape) #(4, 3)
'''

a+b=[[ 0  1  2]
 [10 11 12]
 [20 21 22]
 [30 31 32]]
 
 
'''

步骤:

  • (1)比较形状是否相同,相同直接计算,否则进行(2)
  • (2)对维度低的数组进行升维即shape=(3,) 变为 shape=(1,3)
  • (3)在将1进行叠加为另一个数组一样的形状

    广播的规则:
    对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:
  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

若条件不满足,抛出 “ValueError: frames are not aligned” 异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值