如何在julia中搜索矩阵中的值?

时间:2016-08-31 14:00:50

标签: matrix julia

l具有m n的矩阵(15000 2300)并且我想要提取>>的值。 3000或者< 700表示整个矩阵,然后只在列上,然后只在行中。我怎么能这样做。 我们有一个函数find( x->(x == 3), m),它返回一个值的索引 但我需要一个矩阵,我正在寻找像m [1,5],m [2,6] .....等结果。我怎么能这样做?

m= rand (1:5000,60,40) 

谢谢

2 个答案:

答案 0 :(得分:7)

只需提取满足条件的值

如果您只想提取矩阵中满足条件的值,例如无需知道其位置,您可以直接使用find()filter()函数。最简单的方法是filter()

filter(x-> (x < 700 | x > 3000), m)

将返回一个只包含满足条件的值的数组。同样,您可以使用find()

idx = find(x-> (x < 700 | x > 3000), m)
m[idx]

请注意,对于多维数组,您可以使用两个索引访问其元素,例如: m[1,2]或一维指数,例如m[61]。这些一维指数的惯例是他们对待,例如,矩阵只是所有列的一维堆栈。因此,例如上面代码中的m[idx]

获取满足条件的矩阵条目的坐标

上面,我提到了用于引用数组中元素的不同坐标/索引选项。我们可以使用ind2sub()sub2ind()在它们之间来回切换。因此,例如,在上面的文字中,我可以知道m[1,2]等同于m[61]的一种方式是使用:

julia> sub2ind((60,40), 1, 2)
61

此函数的第一个参数指定数组的尺寸,然后在其后面给出您感兴趣的坐标。它返回与它们对应的一维索引。

这也可以很容易地反向工作,如果我们首先使用find()函数给我们提供一维索引,这很方便:

subs = ind2sub((60,40),idx)

(我们也可以使用ind2sub(size(m),idx)来获得更多便利)

来自文档:

  

ind2sub(dims,index) - &gt;标

     

将一个下标元组返回到一个维度为dims的数组中,    对应于线性指数指数。

因此,此处subs对象的第一个元素将是满足条件的位置的矩阵的所有行坐标,subs对象的第二个元素将是全部矩阵的列坐标。因此,例如,

subs[1][1], subs[2][1]

会为您提供满足您条件的条目的第一个完整坐标。

提取包含满足条件的条目的所有行

因此,类似地,如果您想查找并提取包含满足条件的条目的所有行,您可以使用

row_idx = unique(subs[1])
m_rows = m[row_idx,:]

答案 1 :(得分:1)

您可以将索引和值作为具有良好列表推导的元组获取:

[(i,j,m[i,j]) for i in 1:size(m,1), j in 1:size(m,2) if (m[i,j] > 3000) | (m[i,j] < 700)]

或只是列表中的m [i,j]值:

[m[i,j] for i in 1:size(m,1), j in 1:size(m,2) if (m[i,j] > 3000) | (m[i,j] < 700)]

等。 (这是你想要做的吗?抱歉,这个问题对我来说有点不清楚。)