set zero in matrix elements
16 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Souvik Agasti
el 31 de Jul. de 2017
Comentada: the cyclist
el 14 de Ag. de 2017
Hi, I have a 3d tensor in MATLAB. Call it A. Lets say, size(A)=[4 6 10]. I have another matrix M which holds few indexes of the first two dimensions of the matrix A. Like
M=[1 5;3 2;1 4];
Now, I want to set all elements of the matrix A as zero which has the different index (of the first two dimensions) than the matrix M. Basically, what I want to do is-
A((if index(A{1,2})~=M),:)=0
Please help me.
0 comentarios
Respuesta aceptada
the cyclist
el 31 de Jul. de 2017
This is a little clunky, but it works.
A = rand(4,6,10);
M = [1 5;
3 2;
1 4;];
[a1,a2,a3] = size(A);
[m1,m2] = size(M);
subIndices = [repmat(M,a3,1),repmat((1:a3)',m1,1)];
linearIndicesToKeep = sub2ind([a1,a2,a3],subIndices(:,1),subIndices(:,2),subIndices(:,3));
linearIndicesToZero = setxor(linearIndicesToKeep,1:(a1*a2*a3));
A(linearIndicesToZero) = 0;
3 comentarios
Jan
el 14 de Ag. de 2017
@Cyclist: What a pitty that there is no direct solution like:
B(M(:,1), M(:,2), :) = A(M(:,1), M(:,2), :)
This copies the rectangular sub-matrices but not the desired pages.
Instead of the XORing, I'd copy the wanted elements only:
B = zeros(size(A));
B(linearIndicesToKeep) = A(linearIndicesToKeep);
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!