matlab数组中如何找某个值的坐标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab数组中如何找某个值的坐标相关的知识,希望对你有一定的参考价值。
比如我有一个2行3列的数组,1 2 3 4 5,随便写的,我想知道所有值为3的数在数组中的坐标,有什么办法吗
6 7 3 1 2
1、首先需要知道matlab数组找某个值的坐标,是使用find函数,可以在命令行窗口中输入help find。
2、在matlab命令行窗口中输入a=[1 4 5;6 7 8;7 9 12],创建a数组。
3、输入[m,n]=find(a==9),找到a数组等于9的坐标。
4、按回车键之后,可以看到a数组等于9的坐标有一个,是第3行第2列。
5、如果等于的值有多个,会返回多个坐标位置。
参考技术A1、实现方法
使用find()函数:[m,n]=find(A==x)
2、解析
A==x:将矩阵A的每个元素与x比较,如果相等,相应位置的元素就等于1,否则为0。
find(X):返回X中非零元素的索引(即行列位置)。
3、实例演示:找出矩阵A中所有等于3的元素的行列位置
打开matlab,在命令窗口运行如下代码:
>> A=[1 2 3 4 5;6 7 3 1 2]
>> [m,n]=find(A==3)
从运行结果可知,找到A中元素3的位置为:第1行第3列 和 第2行第3列。
>> [m,n]=find(a==3)
m =
1
2
n =
3
3
>>本回答被提问者和网友采纳 参考技术C find(A == 3)
如何在 Oracle 查询中查找传递数组中某个值的索引
【中文标题】如何在 Oracle 查询中查找传递数组中某个值的索引【英文标题】:How to Find index of some value in passed array in Oracle query 【发布时间】:2017-07-05 10:34:34 【问题描述】:我想在传递的数组中为每一行查找列值的索引。 查找该值是否存在于数组中是不够的,因为我想将该索引与另一列的值进行比较。
我期待这样的事情。
SELECT * FROM my_table t WHERE :argumentArray.indexOf(t.col1) BETWEEN 0 AND t.col2
如果我将该数组转换为表格或类似的东西,也许这是可能的。
这是我的真实示例的结构: 下面是员工树的层次结构。
1000
/ \
1001 1002
/ \
1003 1004
/
1005
我有存储文档共享信息的表格
document_id | shared_under | level
----------- | ------------ | ---------
123 | 1000 | 2
此记录意味着 ID 为 123 的文档与 ID 为 1000 的员工仅由级别 2 共享。 (ID 为 1000、1001、1002、1003、1004 的员工可以访问该文档,而 1005 不能)
想要的结果:
如果员工 1005 搜索文档,他将他的层次结构作为数组参数传递,即 (1005, 1003, 1001, 1000)
查询将如下所示:
SELECT `document_id` FROM `shared_documents` WHERE (1005, 1003, 1001, 1000).indexOf(shared_under) BETWEEN 0 AND `level`
此查询必须返回无数据,因为 emp.1005 在第 3 级低于 emp.1000,但文档仅共享 2 级深度。
如果emp.1003搜索他通过的共享文档(1003,1001,1000)并且查询必须返回文档123,因为它是与员工1000共享的,并且员工1003在他的2内水平深度。
我已经用正则表达式解决了这个问题,但我想知道Oracle是否支持这种解决方案。
【问题讨论】:
请发布您的表结构、一些示例数据、您的确切要求和所需的输出。 请提供minimal reproducible example,包括表的 DDL 语句、示例数据的 DML 语句和预期输出(包括对如何达到解决方案的逻辑的描述)。您似乎在寻求解决方案并希望使用数组来解决问题,但数组在 SQL 中并不典型,可能不是您问题的答案... 【参考方案1】:在子查询中使用表集合表达式:
SELECT *
FROM mytable t
WHERE t.col1 IN ( SELECT COLUMN_VALUE
FROM TABLE( :argumentArray )
WHERE ROWNUM <= t."level" )
更新示例:
Oracle 设置:
CREATE TABLE mytable ( lvl, col1 ) AS
SELECT 1, 'a' FROM DUAL UNION ALL
SELECT 2, 'a' FROM DUAL UNION ALL
SELECT 1, 'b' FROM DUAL UNION ALL
SELECT 3, 'b' FROM DUAL;
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(10);
/
查询:
使用硬编码集合调用它,但您可以pass it in as a bind variable in PL/SQL or from other languages:
SELECT *
FROM mytable t
WHERE col1 IN ( SELECT COLUMN_VALUE
FROM TABLE( stringlist( 'a', 'b' ) )
WHERE ROWNUM <= t.lvl );
输出:
LVL COL1
--- ----
1 a
2 a
3 b
【讨论】:
我收到错误:ORA-01008:当我执行 SELECT * FROM TABLE(:myArray) WHERE ROWNUM 时,并非所有变量都绑定 非常感谢,您的答案很接近,但我想在选择查询中解决它,我不想创建额外的类型、函数或任何东西。以上是关于matlab数组中如何找某个值的坐标的主要内容,如果未能解决你的问题,请参考以下文章