【问题标题】:I want to select random sub matrix around value.我想围绕值选择随机子矩阵。
【发布时间】:2015-07-17 14:30:49
【问题描述】:

我想在随机子矩阵中赋值..

例如.. 第一步,在矩阵“A”中选择一个随机矩阵(nxn)。 (选择搜索空间..) 第二步,从这个矩阵中选择中间值。

另外,是否可用?首先选择“22”(它是总矩阵中的随机数),然后找到“22”周围的矩阵。

我是使用MATLAB的菜鸟,现在我正在努力学习MATLAB。这很有趣!我很抱歉,因为我的英语能力很差..

【问题讨论】:

  • 试试randi(在Matlab命令窗口中输入help randi了解更多信息)
  • @David 谢谢大卫。但是我可以使用 radni 选择随机数,但我无法选择所选数字周围的范围..
  • 问题没有意义。如果从 A 中选择一个随机值,那么这只是一个标量。既然你说你想选择一个搜索空间,那么我猜你实际上想要一个随机向量或 A 的向量子集。你想从矩阵的列跨度或行跨度创建的空间中采样一个随机方向吗?请仔细澄清。
  • @MichaelJ 谢谢你的评论 :) ,你是对的。我想要一个矩阵 A 的向量子集。我还需要子集中的中间值。
  • 您想从 A 中随机选择向量然后求均值?请注意,因为选择 A 的随机列和从 A 的列跨越的空间中选择随机方向不是一回事。

标签: matlab


【解决方案1】:

对于矩阵 A,此代码将随机选择大小为 npart 的分区。虽然可以在原始答案中使用randperm,但@LuisMendo 在 cmets 中指出randi 更简单(实际上它也更快)。

npart = 3 ;
[m,n] = size(A) ;
ix = randi(m-npart+1) ;
iy = randi(n-npart+1) ;
X = A(ix:ix+npart-1,iy:iy+npart-1) ;

当然,最有效的方法是仅对单个随机变量进行采样并将索引转换回:

[m,n] = size(A) ;
ind = randi( (n-npart+1)*(m-npart+1) ) ;
[ix,iy] = ind2sub([m-npart+1,n-npart+1],ind) ;
X = A(ix:ix+npart-1,iy:iy+npart-1) ;

【讨论】:

  • 为什么是randperm(m-npart+1,1) 等? randi(m-npart) 似乎更简单
  • @LuisMendo 不知道我为什么这样写。习惯?但这是一个很好的观点。我对其进行了测试,randi 的语法更简洁,也比randperm 更快,所以我编辑了答案。谢谢!