我有一个源矩阵A(m,n),我使用过" find"现在我有一个所需索引的列表[y,x]。
我还有一个尺寸为B(m,n,3)的3D矩阵。
我想使用find的结果提取B中的所有元素。
因此,如果find产生4对结果,我希望得到一个4x3矩阵,其中Z维度的内容为B的结果索引。
我尝试过很多东西,但一直都失败了:
A = rand(480,640);
[y,x] = find(A < 0.5);
o = B(y,x,:);
Requested 39024x39024x3 (34.0GB) array exceeds maximum array size preference.
我显然做错了,因为B有尺寸(640,640,3)。
答案 0 :(得分:0)
通过您尝试索引的方式,matlab尝试使用y和x中的元素的每个组合来索引B,从而产生大量矩阵。我已经实现了for loop
来做我认为你在问的问题。
我还要注意,为了在B
之间进行索引,前两个维度需要与A
相同,否则您将无法将B
索引到A
之后A = rand(480,640);
B = rand(480,640,3);
[x,y] = find(A < 0.5);
o = zeros(size(x,1),1,3); % x and y are the same length so it doesn't matter
for i = 1:size(x,1)
o(i,1,:)= B(x(i),y(i),:);
end
o = reshape(o,size(x,1),3);
中的最大行或列索引。
newState.guests = []
答案 1 :(得分:0)
您可以reshape B到大小为[m*n , 3]
的2D矩阵,然后使用逻辑索引来提取元素:
C = reshape(B, [], 3);
o = C(A<0.5, :);