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、如果等于的值有多个,会返回多个坐标位置。

参考技术A

1、实现方法

使用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列。

参考技术B >> a=[1 2 3 4 5;6 7 3 1 2];
>> [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数组中如何找某个值的坐标的主要内容,如果未能解决你的问题,请参考以下文章

matlab数组中如何找某个值的坐标

在matlab中,怎么把图片中的图像轮廓坐标找出来?

获取高于某个值的二维数组中的局部最大值坐标

如何将matlab中的坐标系进行旋转

matlab三维图怎么找到z坐标某值对应的x和y值

在MATLAB中知道多个点的位置坐标,怎样求各个点之间的距离?