我已经阅读了示例here,但它似乎没有包括以下情况 .
设 A
是尺寸为 128 x 128 x 3
的三维数组 .
我想从这个数组中随机选择3个整数的集合,通过选择前两个维度的随机对 . 这是我目前的尝试:
rng(1);
choicex = randi(128, 1, 16)
choicey = randi(128, 1, 16)
random_values = A(choicex, choicey,:)
不幸的是,矩阵 random_values
现在是 16 x 16 x 3
,当我希望它是 16 x 3
时 . 取一片这不起作用,因为那时所有的第一个指数都是相同的,或者所有的第二个指数都是相同的 . 我不要求 random_values
带有原始索引 .
有没有办法在matlab中直接用索引表示法实现这一点,而无需编写for循环?
根据给出的答案,我已经更新了问题 .
1 回答
您的代码有两个问题:
randi(nmax, i, j)从
1..nmax
返回随机整数的大小(i,j)
矩阵 . 在你的情况下,nmax
显然必须是128,而不是256 .matlab具有基于1的索引,而不是基于0的索引,因此不要减1 .
这对我有用:
但是这将给出所有给定行和列的所有组合的三元组,因此总共256个三元组 . 使用sub2ind可以实现您真正想要的,但这不是一个简单的表达:
或少几个字符: