how to make a sub matrix from specific indices

1 visualizzazione (ultimi 30 giorni)
Kellie
Kellie il 14 Apr 2023
Commentato: Walter Roberson il 14 Apr 2023
I have a 1400x1400 matrix (A), from this I want to make a 10x10 submatrix but I want it at the followign indices:
312
323
673
876
1031
1326
1344
1354
1359
1384
is this possible?
Thank you!

Risposte (1)

Walter Roberson
Walter Roberson il 14 Apr 2023
Modificato: Walter Roberson il 14 Apr 2023
sizeA = [1400 1400];
indices = [312
323
673
876
1031
1326
1344
1354
1359
1384];
[r, c] = ind2sub(sizeA, indices);
nummat = size(r,1);
mats = cell(nummat,1);
for K = 1 : nummat
mats{K} = A(r(K):r(K)+9, c(K):c(K)+9);
end
Yes, it would be possible to vectorize this a bit, but the code would be notably more difficult to understand.
  2 Commenti
VBBV
VBBV il 14 Apr 2023
Modificato: VBBV il 14 Apr 2023
Both ind2sub & sub2ind are able to produce the 10 x10 matrix format, but which one is correct here is confusing for me,
sizeA = [1400 1400];
A = randn(1400);
indices = [312
323
673
876
1031
1326
1344
1354
1359
1384];
[r c] = ind2sub(sizeA, indices);
nummat = size(r,1);
mats = cell(nummat,1);
for K = 1 : nummat
mats{K} = A(r(K):r(K)+9, c(K):c(K)+9);
end
mats{:}
ans = 10×10
1.2274 0.3295 0.7968 1.4923 -0.7608 0.7907 -0.5803 0.2214 1.2191 -0.2977 0.4435 -1.4633 -0.7854 1.7629 -1.2268 0.8160 -1.0832 -0.9987 -0.4603 0.6937 -0.9401 -0.6759 0.8486 -1.0199 2.0416 -0.3673 -0.3748 0.1962 -0.6763 -2.5935 -0.5716 0.4462 1.7819 -0.1581 1.6739 0.0326 0.4167 0.5241 -1.1618 0.8784 -0.8986 -0.6070 0.0067 1.1046 1.2513 -1.4109 -0.9435 0.8504 1.7319 1.0161 -0.2454 -2.1883 -0.1573 1.0006 -0.7103 0.1212 -0.4622 -0.1738 0.3173 -0.1019 0.7547 -0.5365 -0.9112 -2.0777 0.3595 -0.6276 -0.2749 -0.3126 1.2341 0.4672 0.1448 -0.5764 -0.2750 0.2195 1.0517 0.3727 -0.3154 0.7365 0.2040 0.1246 0.5426 -0.1619 0.0019 2.6920 1.1146 0.1145 -0.0051 0.9233 0.4249 1.4796 -0.6364 0.6818 -1.7166 -1.4217 -1.6261 1.8180 -1.3637 0.8519 -0.3774 -0.7804
ans = 10×10
0.6697 -0.2216 0.6877 -1.8931 -0.0014 -0.6697 0.0405 -0.1257 -1.5222 -0.4424 -0.4472 -0.6073 0.4856 -0.2113 -0.0960 0.9896 0.3959 0.1211 -0.7276 0.2936 -0.2850 0.6803 0.3817 1.4337 -1.0523 -0.0551 1.5178 0.9039 1.3457 0.9360 -0.8927 -0.5396 -0.3796 -0.7903 -0.7854 -1.6147 0.3620 0.6523 -1.1203 0.2483 -0.7449 -0.9152 -0.7908 -0.0733 0.5327 -1.7781 1.4260 -0.2516 -1.0976 0.4227 -1.2642 0.1351 0.0347 0.0540 -0.2795 0.6524 -1.9098 1.3335 -1.2926 -0.9181 0.9319 -1.0401 -0.7477 -1.7887 -1.5969 0.5209 0.4045 1.5619 -0.1162 1.7773 0.0869 -0.5220 1.1894 -1.3465 1.5531 0.0609 0.7463 1.0551 -0.0238 -0.1360 -1.2583 0.6302 0.2016 0.3634 0.2360 -0.6430 0.9249 0.7618 0.0457 -0.7809 1.3842 0.3534 -0.0488 1.4713 -0.4480 -1.7879 0.3722 0.8602 -0.3932 0.2565
ans = 10×10
-2.4064 0.5570 -0.8339 -2.4067 1.3686 0.6052 1.7021 -0.0917 0.7401 -0.5899 1.7309 0.0620 1.1621 -0.6396 0.0083 -0.0413 -1.4599 1.4072 -0.9151 -0.0624 -2.1788 -0.1313 0.4904 0.4537 -0.8098 1.0716 -0.6214 -1.2674 1.1373 0.3682 2.3037 0.1686 0.6020 0.7145 -0.5152 -1.0540 0.6063 0.1481 0.6786 -0.7383 1.0603 1.0721 0.5414 -0.2556 -1.2218 -0.2641 -1.7006 -0.9535 1.1841 1.3660 1.1520 0.7860 -0.9208 -0.3916 -0.1032 0.3456 2.0979 -0.1338 -0.5450 -0.3687 -1.6381 0.6963 -1.3700 1.1938 0.3811 -0.5439 1.5586 0.3399 -0.3875 -0.5935 -0.4899 -1.1105 -0.7849 0.5704 0.8833 0.9133 0.8279 0.8836 0.6648 2.0661 0.8146 0.1991 -0.1595 -0.6342 0.1025 0.6582 -0.6770 -1.0532 0.3205 -1.6026 -1.1088 -0.1052 0.8062 -0.1685 -0.9004 0.0265 0.0214 -1.6802 -0.6561 -1.5523
ans = 10×10
1.1268 0.0370 1.2579 -0.6739 -0.4390 -0.4109 0.7583 -0.8408 2.2990 -0.8014 0.1990 0.8289 1.8590 -0.8605 -0.3906 1.5655 1.2351 -0.6535 -1.1849 -0.3863 -0.7625 -2.2754 0.7528 0.3255 -0.8675 0.4560 2.4472 0.8346 0.6872 -0.4408 -0.3979 0.8189 -0.6469 -0.2538 -0.7524 -1.1820 0.4280 1.4433 0.2509 -1.2179 -0.5213 -0.9014 -0.8947 0.4506 0.6618 1.4883 0.0988 0.8976 1.0143 -0.3166 1.2459 0.5731 -0.0862 0.0879 -0.1629 0.0623 1.2049 0.1768 -0.0708 -1.4698 -0.7387 -1.1931 0.7336 -0.9635 0.7394 -1.2931 0.5884 1.0487 -1.6886 0.7649 -0.0832 -0.1566 1.1809 0.9180 0.2742 -0.9146 -0.6467 0.1735 1.1813 -0.9604 -0.1030 -1.3454 -0.9303 -0.5204 2.0201 1.6035 -0.4046 0.0663 0.4674 -1.2442 0.2572 -0.5886 1.2753 -0.7095 -1.3927 -1.5557 -0.4019 2.3746 -1.6129 0.8868
ans = 10×10
0.9847 -0.4020 -0.5251 0.1701 -0.6140 -0.6884 0.6534 -0.3032 0.3091 -0.3692 0.9861 -0.4543 1.5570 -0.2683 0.7104 0.3965 0.9716 -0.1630 -0.5840 0.0969 0.7748 -0.6726 1.0529 -2.1886 0.3496 0.2964 -1.0824 0.0658 0.2957 0.8040 -0.3948 0.1086 0.1299 -1.5286 -0.9352 0.8854 -0.2151 -0.9710 -0.0098 -0.3886 -0.9170 -0.4063 -1.2175 0.2642 0.3906 0.5182 0.9190 -0.1160 0.5534 -2.1486 0.0223 -1.6013 0.8343 -0.9097 1.8630 0.2969 0.5699 -0.4728 -1.7668 0.2987 -0.5719 -0.2976 0.1616 -1.2727 0.6519 -0.3377 -0.0481 0.1742 -0.4020 1.5383 1.9145 -0.2494 0.5216 -1.5958 -0.5605 0.1725 0.2519 1.8173 -0.7086 -0.4622 -0.4151 1.3074 -0.9092 -1.5118 -0.0560 -1.3397 2.1519 0.3999 1.3701 -0.5088 0.1468 -0.1830 -0.3500 -1.2348 -0.0941 -0.1012 1.2819 1.4033 -1.1342 -0.0837
ans = 10×10
0.0933 1.5828 0.4261 -0.4075 1.7207 0.3468 0.7990 0.5301 -2.3321 -0.2226 -0.1458 1.0198 -1.3263 0.4327 -0.2883 0.1084 -0.0221 -0.5067 0.7344 -0.3785 0.6271 -0.2777 -0.2144 1.5244 0.0726 -0.9391 -0.5420 1.5376 -2.1879 1.7058 1.2357 2.7229 0.0155 -0.4603 0.5415 -0.1820 0.1462 0.0159 1.7782 -0.6156 -1.6198 -0.6055 -0.3607 0.5433 -0.0195 -1.8119 0.2418 1.4614 -1.6690 0.2379 -1.3812 -1.1528 -0.7278 0.4328 1.0143 1.0823 -0.6154 1.0609 1.2193 -0.1190 0.0039 -0.9788 -0.0482 0.5554 1.0455 0.3008 -0.4074 -0.6076 0.8555 -0.4619 0.5751 0.4971 -0.5637 -1.4416 0.3489 -0.2736 -0.3581 2.1733 -1.0961 -1.3528 1.7314 -1.7163 -0.7950 0.8097 0.2180 -1.3015 1.1040 -0.4973 0.5934 -0.9828 1.0615 1.2497 -1.7331 0.1935 1.8003 0.3016 -0.9228 0.6502 1.1792 1.5103
ans = 10×10
-0.4503 0.8373 -0.8358 1.6776 1.0439 -1.4601 -0.4207 0.6244 -0.5346 0.3198 0.9552 -0.1955 -1.9583 -0.4792 0.0437 -0.0828 -0.5921 1.1775 -0.1669 0.2423 0.5675 -0.8013 1.5307 -1.1743 -0.1577 -0.2642 0.0203 -1.2842 0.9979 -0.4941 -0.4357 0.3852 0.9015 1.1771 0.1913 1.0853 -1.3117 1.2533 0.0945 1.4830 0.1810 -1.7190 -1.4033 -0.5826 -1.1408 -0.9292 -0.5815 -0.1439 -0.3964 0.4006 0.8684 0.7353 -1.3325 1.5264 -1.1969 -0.5514 -1.0830 0.1895 -2.2601 0.8543 1.9686 2.0115 0.2306 -1.0766 1.7776 -0.3819 1.4037 0.2358 0.0671 0.4554 -1.2876 0.4543 -2.1239 -0.4798 1.3068 -0.6482 -0.0127 -1.4443 -0.4105 0.8932 0.4975 -0.5648 1.7621 -0.3012 -0.8388 0.1537 0.3617 1.5525 0.0675 -1.4487 -0.4951 1.9292 1.7286 -0.1753 -1.1269 -0.9260 0.9436 0.5801 -1.1331 0.4536
ans = 10×10
1.1286 -1.3361 -1.4970 0.6643 -0.7034 0.5047 -0.5886 -0.1161 0.4318 1.5564 -0.5444 0.0786 0.1863 -1.0993 -1.7784 0.2960 -0.6002 -0.6993 -0.4482 1.1978 1.1724 -0.6675 0.9070 -1.5070 -0.0034 -0.5917 1.1190 -0.3524 -0.5115 -1.9743 0.6043 -0.7524 0.2611 0.2953 -0.2356 1.1350 2.1098 0.0302 -0.0072 0.1504 0.3063 0.3137 -0.5007 -0.5035 -0.2251 -0.4456 0.1703 0.0302 -2.4383 -0.5960 -0.3456 2.1602 -0.8945 0.6599 0.7097 0.0978 2.0203 -1.0533 0.7168 -0.3909 -0.4985 2.0481 0.8436 0.1718 0.5416 1.7352 0.8161 1.0455 -0.0929 1.2690 0.4820 0.0320 1.0301 -0.4336 0.5284 0.1875 2.2568 -0.4538 -0.1784 0.2202 -1.3458 0.5211 2.6368 0.6873 -1.4840 0.5279 -0.8495 -0.7011 1.2811 1.4801 0.7558 1.1309 0.3442 0.3185 1.8050 2.3447 -0.5398 1.3449 -0.8441 0.9285
ans = 10×10
-0.3456 2.1602 -0.8945 0.6599 0.7097 0.0978 2.0203 -1.0533 0.7168 -0.3909 -0.4985 2.0481 0.8436 0.1718 0.5416 1.7352 0.8161 1.0455 -0.0929 1.2690 0.4820 0.0320 1.0301 -0.4336 0.5284 0.1875 2.2568 -0.4538 -0.1784 0.2202 -1.3458 0.5211 2.6368 0.6873 -1.4840 0.5279 -0.8495 -0.7011 1.2811 1.4801 0.7558 1.1309 0.3442 0.3185 1.8050 2.3447 -0.5398 1.3449 -0.8441 0.9285 -0.3737 -0.7873 1.6613 0.4257 -0.7976 -0.0925 -1.0963 0.4607 2.2001 -0.6749 1.1886 -0.6613 1.1697 0.3777 -0.6765 0.5386 -0.3835 0.0877 -0.4095 1.2290 -0.8211 0.8848 0.7490 -0.5707 0.9414 -1.5440 -0.8125 -0.5192 0.8658 -0.8438 1.6599 0.7769 0.4541 -0.1691 0.7683 -1.9636 0.9507 0.8829 -1.5058 0.1840 -2.1856 0.2031 -0.3591 0.3669 -0.6781 0.5134 -0.5405 -0.4923 -1.0761 0.7079
ans = 10×10
-1.3066 0.1792 -0.3632 -0.2916 1.6796 1.3848 0.9249 -1.1241 0.8276 -0.6299 0.4465 -1.0432 -2.0024 -0.3961 0.2425 -1.3310 0.9709 0.6972 -1.3396 -1.4757 0.7585 0.0243 0.7183 1.3754 -0.7643 0.8189 2.5932 -0.3269 0.4465 0.9266 0.7364 0.4367 0.3985 -0.2891 -1.4749 -2.3235 -0.2126 2.1990 -0.1747 -0.4467 0.0126 0.3232 1.0698 0.5077 -1.4442 2.2230 0.4276 -1.5945 0.1920 -2.7698 0.8809 -0.1422 1.2161 1.8356 1.0401 -1.0258 -0.2862 -0.3394 0.2612 2.0778 -0.0869 -1.2442 -0.4470 -1.1189 -1.0614 -0.6622 0.9346 -1.3191 -0.1541 -0.4887 -1.7913 -0.5962 0.2035 -0.1535 1.2930 0.4868 1.2997 -1.0880 -0.0098 0.4224 0.9853 0.5005 -0.1731 0.9143 -0.8004 -1.7848 -0.9680 -1.8426 0.2232 1.3747 -1.1119 1.4142 -1.0316 -0.4480 -0.2625 0.1601 -1.4253 -1.2456 0.6185 0.7708
Walter Roberson
Walter Roberson il 14 Apr 2023
Thanks for catching that, should be ind2sub()... I corrected my code.

Accedi per commentare.

Categorie

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

Tag

Prodotti


Release

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by