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)
谢谢
只需提取满足条件的值即可
如果您只想提取矩阵中满足条件的值,例如无需知道其位置,则可以直接使用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)