how to split a table to multiple table?

2 visualizaciones (últimos 30 días)
Jennifer Arellana
Jennifer Arellana el 2 de Abr. de 2021
Comentada: Jennifer Arellana el 6 de Abr. de 2021
For example, I have the next table with dimension 16x4:
CT = [
196 146 154 244;
317 129 140 224;
246 256 314 161;
333 292 245 183;
296 246 222 293;
291 138 174 174;
229 227 164 166;
176 115 184 237;
305 316 128 158;
234 345 211 142;
313 330 135 315;
262 208 286 172;
305 316 128 158;
196 146 154 244;
313 330 135 315;
296 246 222 293
];
And I want to split it in subtables each one with a dimension of 4x4. How can i do it?
  1 comentario
dpb
dpb el 2 de Abr. de 2021
In MATLAB that is an array or a matrix, not a table...just for nomenclature.

Iniciar sesión para comentar.

Respuesta aceptada

dpb
dpb el 2 de Abr. de 2021
>> CT=reshape(CT,4,4,[])
CT(:,:,1) =
196 296 305 305
317 291 234 196
246 229 313 313
333 176 262 296
CT(:,:,2) =
146 246 316 316
129 138 345 146
256 227 330 330
292 115 208 246
CT(:,:,3) =
154 222 128 128
140 174 211 154
314 164 135 135
245 184 286 222
CT(:,:,4) =
244 293 158 158
224 174 142 244
161 166 315 315
183 237 172 293
>>
Address each 4x4 slice as
X=CT(:,:,i);
for i=1,2,3,4
Alternatively, you could just increment rows by indexing as
>> for i=1:4:size(CT,1)
CT(i:i+3,:), end
ans =
196 146 154 244
317 129 140 224
246 256 314 161
333 292 245 183
ans =
296 246 222 293
291 138 174 174
229 227 164 166
176 115 184 237
ans =
305 316 128 158
234 345 211 142
313 330 135 315
262 208 286 172
ans =
305 316 128 158
196 146 154 244
313 330 135 315
296 246 222 293
>>
  1 comentario
Jennifer Arellana
Jennifer Arellana el 6 de Abr. de 2021
@dpb Thank you for your answer! the command "reshape" worked very well but I have another problem with this command. The problem is the order that the matrix have, please check this link:
I did another question about this problem and i gave a test data and the codes that i am using, if you run it in matlab you can notice that the order in the values in the new matrix is different to the old matrix but i want that the both has the same order.

Iniciar sesión para comentar.

Más respuestas (1)

jannat alsaidi
jannat alsaidi el 2 de Abr. de 2021
you can use this way to split CT,
CT = [
196 146 154 244;
317 129 140 224;
246 256 314 161;
333 292 245 183;
296 246 222 293;
291 138 174 174;
229 227 164 166;
176 115 184 237;
305 316 128 158;
234 345 211 142;
313 330 135 315;
262 208 286 172;
305 316 128 158;
196 146 154 244;
313 330 135 315;
296 246 222 293
]
a=size(CT);
r=1;
n=1;
while n<(1+a(2))
k(:,:,n)=CT(r:a(2)*n,1:a(2))
r=r+4;
n=n+1;
end

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by