# Set elements in center of matrix into NaN values

3 visualizzazioni (ultimi 30 giorni)
Irvin Velazquez Morales il 6 Apr 2024
Modificato: Voss il 7 Apr 2024
I have different matrices of 288x96 for values changing with time in a for loop. I want certain elements in the center within a radius to be set to NaN for all the different matrices. For simplicity let's say I have A=rand(288,96). The center would be A(145, 49) with a diameter of 13 elements. I know I can manually make them equal to NaN myself like A(145,49)=NaN. However, that is quite time consuming with long lines of code. Is there a workaround?
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Voss il 7 Apr 2024
Modificato: Voss il 7 Apr 2024
Something like this, for a single matrix:
A = rand(288,96);
D = 13;
figure
surface(A,'EdgeColor','none')
axis image
[M,N] = size(A);
C = floor([M,N]/2)+1;
[I,J] = ndgrid(1:M,1:N);
idx = (I-C(1)).^2+(J-C(2)).^2<=(D/2)^2;
A(idx) = NaN;
figure
surface(A,'EdgeColor','none')
axis image
Something like this, for all matrices at once:
A1 = rand(288,96);
A2 = rand(288,96);
A3 = rand(288,96);
A4 = rand(288,96);
T = cat(3,A1,A2,A3,A4);
figure
tiledlayout(2,2)
for ii = 1:4
nexttile
surface(T(:,:,ii),'EdgeColor','none')
axis image
end
[M,N,P] = size(T);
C = floor([M,N]/2)+1;
[I,J] = ndgrid(1:M,1:N);
[r,c] = find((I-C(1)).^2+(J-C(2)).^2<=(D/2)^2);
q = repelem((1:P).',numel(r),1);
r = repmat(r,P,1);
c = repmat(c,P,1);
idx = sub2ind([M,N,P],r,c,q);
T(idx) = NaN;
figure
tiledlayout(2,2)
for ii = 1:4
nexttile
surface(T(:,:,ii),'EdgeColor','none')
axis image
end
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Più risposte (1)

Paul il 6 Apr 2024
Not sure what diameter means in this context. But, if it can be defined in terms of row and column indices, then maybe something like this using sub2ind
A = rand(10,5);
row = [5 5 5 4 6]; col = [2 3 4 3 3];
A(sub2ind(size(A),row,col)) = NaN
A = 10x5
0.9484 0.0105 0.5620 0.9706 0.2287 0.6631 0.5854 0.2387 0.9701 0.6311 0.2513 0.6862 0.8084 0.9329 0.3017 0.9508 0.4300 NaN 0.2184 0.6723 0.3862 NaN NaN NaN 0.7173 0.6273 0.2573 NaN 0.3533 0.6479 0.2821 0.1550 0.6533 0.0905 0.9538 0.4071 0.6005 0.6478 0.1312 0.1005 0.7805 0.6410 0.8942 0.0034 0.3871 0.3880 0.2638 0.7514 0.3010 0.8023
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
If that really means a rectangular selection, the more simply
A(4:6,2:4) = NaN
A = 10x5
0.9484 0.0105 0.5620 0.9706 0.2287 0.6631 0.5854 0.2387 0.9701 0.6311 0.2513 0.6862 0.8084 0.9329 0.3017 0.9508 NaN NaN NaN 0.6723 0.3862 NaN NaN NaN 0.7173 0.6273 NaN NaN NaN 0.6479 0.2821 0.1550 0.6533 0.0905 0.9538 0.4071 0.6005 0.6478 0.1312 0.1005 0.7805 0.6410 0.8942 0.0034 0.3871 0.3880 0.2638 0.7514 0.3010 0.8023
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

R2022a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by