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

vin*_*cet 0 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) 
Run Code Online (Sandbox Code Playgroud)

谢谢

Mic*_*gge 7

只需提取满足条件的值即可

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

filter(x-> (x < 700 | x > 3000), m)
Run Code Online (Sandbox Code Playgroud)

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

idx = find(x-> (x < 700 | x > 3000), m)
m[idx]
Run Code Online (Sandbox Code Playgroud)

请注意,对于多维数组,您可以使用两个索引访问其元素,例如,m[1,2]或使用一维索引,例如m[61].这些一维索引的约定是它们将矩阵视为所有列的一维堆栈.因此,例如m[idx]在上面的代码中.

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

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

julia> sub2ind((60,40), 1, 2)
61
Run Code Online (Sandbox Code Playgroud)

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

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

subs = ind2sub((60,40),idx)
Run Code Online (Sandbox Code Playgroud)

(我们也可以使用ind2sub(size(m),idx)更方便)

从文档:

ind2sub(dims,index) - >下标

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

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

subs[1][1], subs[2][1]
Run Code Online (Sandbox Code Playgroud)

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

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

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

row_idx = unique(subs[1])
m_rows = m[row_idx,:]
Run Code Online (Sandbox Code Playgroud)