Arrays 是否可以使用索引数组将三维数组索引为二维?
我已经通读了这些例子,但似乎没有包括下面的例子 设Arrays 是否可以使用索引数组将三维数组索引为二维?,arrays,matlab,Arrays,Matlab,我已经通读了这些例子,但似乎没有包括下面的例子 设A为三维数组,其尺寸128 x 128 x 3 我想从这个数组中随机选取3个整数的集合,通过为前两个维度选取随机对。这是我目前的尝试: rng(1); choicex = randi(128, 1, 16) choicey = randi(128, 1, 16) random_values = A(c
A
为三维数组,其尺寸128 x 128 x 3
我想从这个数组中随机选取3个整数的集合,通过为前两个维度选取随机对。这是我目前的尝试:
rng(1);
choicex = randi(128, 1, 16)
choicey = randi(128, 1, 16)
random_values = A(choicex, choicey,:)
不幸的是,矩阵随机_值
现在是16x16x3
,而我希望它是16x3
。
只取其中一部分是不可行的,因为这样一来,要么所有第一个索引都相同,要么所有第二个索引都相同。
我不要求随机值
携带原始索引
有没有办法在matlab中直接使用索引符号实现这一点,而不必编写for循环
根据给出的答案,我已更新了问题。您的代码有两个问题:
1..nmax
返回随机整数的大小(i,j)
矩阵。在您的例子中,nmax
显然必须是128,而不是256>> A = randn(128,128,3);
>> choicex = randi(128, 1, 16);
>> choicey = randi(128, 1, 16);
>> B = A(choicex, choicey,:);
>> size(B)
ans =
16 16 3
但这将给出给定行和列的所有组合上的所有三元组,总共256个三元组。你真正想要的东西是可以实现的,但这不是一个简单的表达:
A(sub2ind(size(A), repmat(choicex,3,1), repmat(choicey,3,1), ...
repmat([1;2;3],1,16)))
或少几个字符:
A(sub2ind(size(A), [1;1;1]*choicex, [1;1;1]*choicey, [1;2;3]*ones(1,16)))
+1,您的答案确实解决了错误,但我正在尝试获得16组3个值,而不是256组3个值。如果我将上面的
4
替换为16
,则将获得16个值,但所选点之间将有共享索引。