NumPy多维数组的mask掩码索引

参考链接: Boolean or “mask” index arrays

在这里插入图片描述
说明:通过逻辑判断符号可以得到一个mask掩码,其值是True或者False,并且维度和原来的多维数组相同.使用mask来索引得到的是一个一维数组,筛选出True位置对应的元素.通过mask掩码就可以对原多维数组进行修改.但是如果将mask筛选出的内容赋值给一个变量的话,无法通过这个变量来修改原来的多维数组,他们互不影响.
实验1:

(base) PS C:\Users\chenxuqi> python
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> z = np.arange(12).reshape(3,4)
>>> z
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> mask4cxq = z > 6
>>> mask4cxq
array([[False, False, False, False],
       [False, False, False,  True],
       [ True,  True,  True,  True]])
>>> z[mask4cxq]
array([ 7,  8,  9, 10, 11])
>>> a = z[mask4cxq]
>>> a
array([ 7,  8,  9, 10, 11])
>>> z
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a[0] = 20200910
>>> a
array([20200910,        8,        9,       10,       11])
>>> z
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> z[mask4cxq] = 8888888
>>> z
array([[      0,       1,       2,       3],
       [      4,       5,       6, 8888888],
       [8888888, 8888888, 8888888, 8888888]])
>>> a
array([20200910,        8,        9,       10,       11])
>>>
>>>  

实验2: 掩码mask与整数索引混合使用

Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import numpy as np
>>> z = np.arange(12).reshape(3,4)
>>> z
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> mask4cxq = z > 6
>>> mask4cxq
array([[False, False, False, False],
       [False, False, False,  True],
       [ True,  True,  True,  True]])
>>> z[mask4cxq]
array([ 7,  8,  9, 10, 11])
>>> z[mask4cxq] = 20200910
>>> z
array([[       0,        1,        2,        3],
       [       4,        5,        6, 20200910],
       [20200910, 20200910, 20200910, 20200910]])
>>> z[z < 4] = 888
>>> z
array([[     888,      888,      888,      888],
       [       4,        5,        6, 20200910],
       [20200910, 20200910, 20200910, 20200910]])
>>> 
>>> 
>>> 
>>> z = np.arange(12).reshape(3,4)
>>> z
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> z[...,0][z[...,0] > 1] = 20200910 # 只修改某一列
>>> z
array([[       0,        1,        2,        3],
       [20200910,        5,        6,        7],
       [20200910,        9,       10,       11]])
>>> 
>>> 
>>> z = np.arange(12).reshape(3,4)
>>> z
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> z[z[...,1]>4]
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> z[z[...,1]>4,1]
array([5, 9])
>>> # 只修改某一列
>>> z[z[...,1]>4,1] = 20200910
>>> z
array([[       0,        1,        2,        3],
       [       4, 20200910,        6,        7],
       [       8, 20200910,       10,       11]])
>>> 
>>> z = np.arange(12).reshape(3,4)
>>> z
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> z[..., 1:][z[..., 1:]<10] = 20200910
>>> z
array([[       0, 20200910, 20200910, 20200910],
       [       4, 20200910, 20200910, 20200910],
       [       8, 20200910,       10,       11]])
>>> 
>>> 
>>> 
### 使用 NumPy 获取数组中特定位置的元素 在 NumPy 中,可以通过多种方式获取数组中特定位置的元素。以下是几种常见的方法及其示例: #### 1. 基于索引的方式 通过简单的整数索引来访问一维或多维数组中的单个元素或子集。 ```python import numpy as np arr = np.array([[10, 20], [30, 40]]) element = arr[0, 1] # 访问第0行第1列的元素 print(element) # 输出: 20 ``` 这种方法适用于已知具体行列号的情况[^3]。 --- #### 2. 利用布尔掩码筛选数据 可以创建一个布尔数组作为过滤器,从而提取符合条件的数据。 ```python import numpy as np a = np.array([1, 2, 3, 4, 5]) mask = a > 3 # 创建布尔掩码 filtered_elements = a[mask] print(filtered_elements) # 输出: [4 5] ``` 此技术允许动态定义条件并快速检索匹配项[^4]。 --- #### 3. 结合 `np.where` 函数定位目标值的位置 当需要知道哪些下标的项目满足给定标准时,可采用该函数实现这一目的。 ```python import numpy as np b = np.array([7, 8, 9, 10, 11]) indices = np.where(b % 2 == 0)[0] # 查找偶数值所在索引 result_values = b[indices] # 提取这些位置上的实际数值 print(result_values) # 显示结果为:[8 10] ``` 上述例子展示了怎样利用逻辑运算符构建查询表达式进而得到所需的结果集合。 --- #### 4. 调整大小后再选取感兴趣的部分 如果原始矩阵尺寸不符合预期,则先调整其结构再执行后续操作可能是必要的步骤之一。 ```python import numpy as np original_array = np.arange(6).reshape((2, 3)) resized_array = np.resize(original_array,(3,2)) specific_element=resized_array[2][1] print(specific_element)#输出最后一个被填充进去重复使用的原二维表里最右下方那个数字即'5' ``` 这里说明了即使改变原有布局形态之后仍然能够准确定位到想要查看的那个成员个体[^1]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值