Numpy 布尔索引,数组广播

Numpy 布尔索引,数组广播

  • 1.布尔索引
  • 2.数组广播

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进行叠加为另一个数组一样的形状
    Numpy 布尔索引,数组广播_第1张图片
    广播的规则:
    对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:
  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

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

你可能感兴趣的:(numpy)