MATLAB函数matrix_find_k编写:获取矩阵指定值的位置索引
解决MATLAB函数
matrix_find_k的收尾问题 嘿,你已经迈出了关键的第一步——用m == k生成标记目标位置的逻辑矩阵,接下来只需要用MATLAB自带的find函数就能轻松获取所有1的位置,然后整理成要求的行向量就行啦!
完整实现代码
function rvector = matrix_find_k(m, k) % 生成逻辑矩阵,标记矩阵中等于k的元素位置 logical_mat = m == k; % 获取所有目标元素的行、列下标 [row_indices, col_indices] = find(logical_mat); % 将行、列下标拼接成连续的行向量 rvector = [row_indices(:)'; col_indices(:)']; end
代码逐行解释
- 第一步:
logical_mat = m == k
这就是你已经写好的部分,把原矩阵转换成布尔矩阵,所有等于k的位置会被标记为true(也就是数值1),其余为false(数值0)。 - 第二步:
[row_indices, col_indices] = find(logical_mat)find函数专门用来定位矩阵中非零元素的位置,当传入布尔矩阵时,它会返回所有true元素的行索引和列索引,分别存储在row_indices和col_indices两个列向量里。 - 第三步:
rvector = [row_indices(:)'; col_indices(:)']
先用(:)把列向量转成一维数组,再用'转置成行向量,最后把行索引和列索引拼接起来,就得到了[i1 j1 i2 j2 ... in jn]格式的结果行向量。如果矩阵里没有k,find会返回空向量,拼接后自然也是空向量,完全符合需求。
测试示例
比如我们用这个矩阵测试:
test_matrix = [1 5 3; 5 2 5; 4 7 5]; result = matrix_find_k(test_matrix, 5);
运行后result会是[1 2 2 1 2 3 3 3],对应所有5的位置:(1,2)、(2,1)、(2,3)、(3,3)。
内容的提问来源于stack exchange,提问作者Marti Butlor
相关产品推荐
相关产品推荐

