如何获取一个布尔矩阵中True所对应的行列索引
时间: 2024-03-10 22:51:25 浏览: 66
可以使用numpy库中的函数`np.argwhere()`来获取一个布尔矩阵中True所对应的行列索引。该函数返回一个二维数组,其中每个子数组表示一个True值的索引,子数组的第一个元素是行索引,第二个元素是列索引。例如,对于以下布尔矩阵:
```
[[ True False False]
[False True False]
[False False True]]
```
可以使用`np.argwhere()`函数来获取True值所对应的索引:
```python
import numpy as np
bool_matrix = np.array([[True, False, False], [False, True, False], [False, False, True]])
true_indexes = np.argwhere(bool_matrix)
print(true_indexes)
```
输出结果为:
```
[[0 0]
[1 1]
[2 2]]
```
其中,第一行表示第一个True值所在的行列索引,第二行表示第二个True值所在的行列索引,以此类推。
相关问题
现有一个二维数值矩阵以及对应的布尔矩阵,如何保留bool值为True的值
如果你想在二维数值矩阵(通常是numpy数组或者其他编程语言中的类似结构)中,只保留对应布尔矩阵中值为True的位置,并将该位置的数值原样保存下来,你可以按照以下步骤操作:
1. **检查布尔矩阵**:遍历布尔矩阵,找出所有True的索引对。
```python
boolean_matrix = ... # 假设这是一个布尔类型的二维列表或数组
indices = np.argwhere(boolean_matrix) if using_numpy else [(i, j) for i, row in enumerate(boolean_matrix) for j, val in enumerate(row) if val] # 使用argwhere函数找到非零位置,如果使用其他语言,如列表推导式类似处理
```
2. **创建新的空矩阵**:根据原始数值矩阵的形状创建一个新的矩阵,仅用于存储True对应的元素。
```python
value_matrix = np.zeros_like(value_matrix) if using_numpy else [[0] * value_matrix[0].__len__() for _ in range(value_matrix.__len__())]
```
3. **应用保留规则**:将找到的索引和其对应的数值插入到新矩阵中。
```python
for index in indices:
value_matrix[index[0], index[1]] = value_matrix_at_index[index] # 如果是numpy数组,直接赋值;如果是列表嵌套,替换值
```
4. **返回结果矩阵**:现在`value_matrix`就包含了原始数值矩阵中True所在的元素及其数值。
```python
result = value_matrix
```
python 矩阵索引是一个bool矩阵
是的,Python中可以使用布尔矩阵来进行矩阵索引操作。布尔矩阵是一个与待索引矩阵形状相同的矩阵,元素值为True或False,用于指示哪些元素需要被索引。
例如,假设有一个矩阵A和一个布尔矩阵B,我们可以使用布尔矩阵B来索引矩阵A,获取符合条件的元素。具体操作可以使用NumPy库中的布尔索引功能来实现。
以下是一个简单的示例:
```python
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
B = np.array([[True, False, True],
[False, True, False],
[True, False, True]])
result = A[B] # 使用布尔矩阵B索引矩阵A
print(result)
```
输出结果为:
```
[1 3 5 7 9]
```
在上述示例中,布尔矩阵B中为True的位置对应的A矩阵中的元素被提取出来,形成一个一维数组作为结果输出。
阅读全文