Subsetting an n-d array with no loop

1 visualización (últimos 30 días)
Francois Miguet
Francois Miguet el 12 de Abr. de 2023
Editada: Adam Danz el 13 de Abr. de 2023
I have an n-d array that I want to subset along specific dimensions accordingly.
For instance, consider the following array,
Consider also a permutation or selection of specific indices from the last dimension:
I want to extract an n-d array B that contains all the diagonal elements of the 1st and last dimensions (applying for that last dimension the σ transformation) :
One option, rather brute-force, is to do the following:
A = rand(10,25,7,10);
sigma = [5,5,4,1,1,9,8,7,2,4];
for i=1:10
B(i,:,:)= A (i,:,:,sigma(i))
end
However, if I deal with very large arrays, this requires a loop which really slows down my code.
I have tried subsetting like below, but Matlab doesn't understand that the index for the 1st dimension runs with the index for last dimension.
C = A(1:10,:,:,sigma(1:10))
If I do this, I end up with a matrix, which would be the following
Is there a way of subsetting an n-d array along specific dimensions simultaneously without a loop ?

Respuesta aceptada

Vilém Frynta
Vilém Frynta el 12 de Abr. de 2023
Movida: Walter Roberson el 12 de Abr. de 2023
Could this work for you? It may be too "sample specific" instead working for every example.
This script generates a 4D array A of random numbers, and an array sigma of indices (which you provided). It then uses these indices to extract elements from A along the fourth dimension, and saves the results in a new array B, creating a new 3D array that only contains the elements of A selected by the sigma array.
sub2ind function needs same length vectors, so it's been workarounded a bit.
A = rand(10,25,7,10);
sigma = [5,5,4,1,1,9,8,7,2,4];
idx = sub2ind(size(A), repmat((1:10)',25*7,1), ...
repmat(reshape(repmat((1:25)',1,7),[],1),10,1), ...
repmat(reshape(repmat((1:7)',25,1),[],1),10,1), ...
repmat(sigma',25*7,1));
B = reshape(A(idx), [10, 25, 7]);
disp(B)
(:,:,1) = Columns 1 through 19 0.8419 0.1654 0.4302 0.0222 0.1194 0.4118 0.8931 0.6330 0.7192 0.4322 0.2011 0.2726 0.9072 0.1600 0.8224 0.5720 0.2752 0.6638 0.9715 0.1068 0.2722 0.2647 0.3641 0.5543 0.1652 0.7239 0.3740 0.8143 0.3968 0.7299 0.7016 0.2639 0.0332 0.9909 0.0442 0.9355 0.4878 0.3770 0.1411 0.5408 0.4414 0.0513 0.8026 1.0000 0.0751 0.5718 0.8551 0.5188 0.3871 0.0247 0.1508 0.5312 0.5501 0.1578 0.6124 0.7138 0.7429 0.3241 0.2109 0.7512 0.1503 0.8854 0.9613 0.2702 0.2072 0.3297 0.1601 0.5885 0.8163 0.7043 0.2722 0.3613 0.4253 0.2086 0.1753 0.7646 0.9964 0.0846 0.2339 0.6096 0.4706 0.6881 0.8045 0.1918 0.5795 0.3290 0.7296 0.9661 0.8417 0.4322 0.3425 0.8539 0.1077 0.4708 0.4340 0.5386 0.4330 0.4899 0.2925 0.3641 0.7586 0.9642 0.9607 0.5449 0.2362 0.3217 0.0573 0.5500 0.5746 0.0740 0.8235 0.1572 0.2822 0.3274 0.4756 0.8898 0.5960 0.0507 0.0921 0.1475 0.1726 0.9654 0.9958 0.4072 0.4900 0.9518 0.4734 0.7550 0.4443 0.7000 0.9827 0.4097 0.2692 0.6074 0.0632 0.8178 0.9912 0.7856 0.1898 0.9194 0.8009 0.5920 0.4843 0.8502 0.5559 0.3164 0.8014 0.0337 0.2448 0.6822 0.9138 0.1172 0.7617 0.0669 0.1958 0.1749 0.5044 0.0657 0.3261 0.2607 0.5235 0.2774 0.3124 0.7538 0.7401 0.2160 0.3764 0.1029 0.6114 0.0423 0.9861 0.0539 0.0552 0.0603 0.1992 0.8039 0.2940 0.6013 0.1736 0.8238 0.6903 0.4683 0.0435 0.2153 0.3781 0.3374 0.2396 0.0657 0.8695 0.4397 Columns 20 through 25 0.0297 0.0033 0.2927 0.4264 0.1332 0.2415 0.2785 0.1678 0.4385 0.4717 0.4377 0.0106 0.3901 0.6661 0.8665 0.8876 0.7462 0.0204 0.7250 0.7851 0.9598 0.5317 0.9935 0.3177 0.3933 0.3303 0.7820 0.7344 0.4992 0.7589 0.6290 0.5364 0.9495 0.8766 0.1682 0.5318 0.1893 0.4017 0.1995 0.4424 0.5875 0.8294 0.7882 0.0410 0.4026 0.0419 0.3005 0.2005 0.8363 0.2756 0.6467 0.7691 0.9012 0.1762 0.3174 0.3921 0.7081 0.0927 0.6641 0.8973 (:,:,2) = Columns 1 through 19 0.7295 0.9767 0.9107 0.1318 0.7118 0.9255 0.6909 0.4158 0.2962 0.7614 0.8419 0.1654 0.4302 0.0222 0.1194 0.4118 0.8931 0.6330 0.7192 0.5105 0.3614 0.6143 0.7640 0.8465 0.8773 0.4293 0.6849 0.2809 0.3280 0.1068 0.2722 0.2647 0.3641 0.5543 0.1652 0.7239 0.3740 0.8143 0.5359 0.8440 0.4746 0.5335 0.3952 0.7718 0.3380 0.0489 0.8560 0.7551 0.1411 0.5408 0.4414 0.0513 0.8026 1.0000 0.0751 0.5718 0.8551 0.3204 0.1051 0.8214 0.3956 0.1964 0.0831 0.2789 0.0179 0.6262 0.8167 0.3241 0.2109 0.7512 0.1503 0.8854 0.9613 0.2702 0.2072 0.3297 0.0027 0.0980 0.0290 0.3765 0.0310 0.8001 0.7793 0.5528 0.4243 0.4869 0.9964 0.0846 0.2339 0.6096 0.4706 0.6881 0.8045 0.1918 0.5795 0.6930 0.7368 0.3657 0.7719 0.1206 0.0464 0.1892 0.8462 0.6369 0.9851 0.5386 0.4330 0.4899 0.2925 0.3641 0.7586 0.9642 0.9607 0.5449 0.6023 0.9826 0.5895 0.4044 0.6841 0.8209 0.3883 0.0739 0.0371 0.8075 0.4756 0.8898 0.5960 0.0507 0.0921 0.1475 0.1726 0.9654 0.9958 0.7721 0.1879 0.2124 0.6136 0.5076 0.1983 0.1037 0.2933 0.7815 0.2867 0.6074 0.0632 0.8178 0.9912 0.7856 0.1898 0.9194 0.8009 0.5920 0.0809 0.2578 0.1787 0.9215 0.9610 0.9895 0.7791 0.6516 0.1358 0.7782 0.7617 0.0669 0.1958 0.1749 0.5044 0.0657 0.3261 0.2607 0.5235 0.8553 0.3136 0.3753 0.0828 0.3849 0.4778 0.2705 0.3805 0.5815 0.8126 0.0539 0.0552 0.0603 0.1992 0.8039 0.2940 0.6013 0.1736 0.8238 Columns 20 through 25 0.4322 0.2011 0.2726 0.9072 0.1600 0.8224 0.3968 0.7299 0.7016 0.2639 0.0332 0.9909 0.5188 0.3871 0.0247 0.1508 0.5312 0.5501 0.1601 0.5885 0.8163 0.7043 0.2722 0.3613 0.3290 0.7296 0.9661 0.8417 0.4322 0.3425 0.2362 0.3217 0.0573 0.5500 0.5746 0.0740 0.4072 0.4900 0.9518 0.4734 0.7550 0.4443 0.4843 0.8502 0.5559 0.3164 0.8014 0.0337 0.2774 0.3124 0.7538 0.7401 0.2160 0.3764 0.6903 0.4683 0.0435 0.2153 0.3781 0.3374 (:,:,3) = Columns 1 through 19 0.5720 0.2752 0.6638 0.9715 0.0297 0.0033 0.2927 0.4264 0.1332 0.2415 0.7295 0.9767 0.9107 0.1318 0.7118 0.9255 0.6909 0.4158 0.2962 0.0442 0.9355 0.4878 0.3770 0.2785 0.1678 0.4385 0.4717 0.4377 0.0106 0.5105 0.3614 0.6143 0.7640 0.8465 0.8773 0.4293 0.6849 0.2809 0.1578 0.6124 0.7138 0.7429 0.3901 0.6661 0.8665 0.8876 0.7462 0.0204 0.5359 0.8440 0.4746 0.5335 0.3952 0.7718 0.3380 0.0489 0.8560 0.4253 0.2086 0.1753 0.7646 0.7250 0.7851 0.9598 0.5317 0.9935 0.3177 0.3204 0.1051 0.8214 0.3956 0.1964 0.0831 0.2789 0.0179 0.6262 0.8539 0.1077 0.4708 0.4340 0.3933 0.3303 0.7820 0.7344 0.4992 0.7589 0.0027 0.0980 0.0290 0.3765 0.0310 0.8001 0.7793 0.5528 0.4243 0.8235 0.1572 0.2822 0.3274 0.6290 0.5364 0.9495 0.8766 0.1682 0.5318 0.6930 0.7368 0.3657 0.7719 0.1206 0.0464 0.1892 0.8462 0.6369 0.7000 0.9827 0.4097 0.2692 0.1893 0.4017 0.1995 0.4424 0.5875 0.8294 0.6023 0.9826 0.5895 0.4044 0.6841 0.8209 0.3883 0.0739 0.0371 0.2448 0.6822 0.9138 0.1172 0.7882 0.0410 0.4026 0.0419 0.3005 0.2005 0.7721 0.1879 0.2124 0.6136 0.5076 0.1983 0.1037 0.2933 0.7815 0.1029 0.6114 0.0423 0.9861 0.8363 0.2756 0.6467 0.7691 0.9012 0.1762 0.0809 0.2578 0.1787 0.9215 0.9610 0.9895 0.7791 0.6516 0.1358 0.2396 0.0657 0.8695 0.4397 0.3174 0.3921 0.7081 0.0927 0.6641 0.8973 0.8553 0.3136 0.3753 0.0828 0.3849 0.4778 0.2705 0.3805 0.5815 Columns 20 through 25 0.7614 0.8419 0.1654 0.4302 0.0222 0.1194 0.3280 0.1068 0.2722 0.2647 0.3641 0.5543 0.7551 0.1411 0.5408 0.4414 0.0513 0.8026 0.8167 0.3241 0.2109 0.7512 0.1503 0.8854 0.4869 0.9964 0.0846 0.2339 0.6096 0.4706 0.9851 0.5386 0.4330 0.4899 0.2925 0.3641 0.8075 0.4756 0.8898 0.5960 0.0507 0.0921 0.2867 0.6074 0.0632 0.8178 0.9912 0.7856 0.7782 0.7617 0.0669 0.1958 0.1749 0.5044 0.8126 0.0539 0.0552 0.0603 0.1992 0.8039 (:,:,4) = Columns 1 through 19 0.4118 0.8931 0.6330 0.7192 0.4322 0.2011 0.2726 0.9072 0.1600 0.8224 0.5720 0.2752 0.6638 0.9715 0.0297 0.0033 0.2927 0.4264 0.1332 0.1652 0.7239 0.3740 0.8143 0.3968 0.7299 0.7016 0.2639 0.0332 0.9909 0.0442 0.9355 0.4878 0.3770 0.2785 0.1678 0.4385 0.4717 0.4377 1.0000 0.0751 0.5718 0.8551 0.5188 0.3871 0.0247 0.1508 0.5312 0.5501 0.1578 0.6124 0.7138 0.7429 0.3901 0.6661 0.8665 0.8876 0.7462 0.9613 0.2702 0.2072 0.3297 0.1601 0.5885 0.8163 0.7043 0.2722 0.3613 0.4253 0.2086 0.1753 0.7646 0.7250 0.7851 0.9598 0.5317 0.9935 0.6881 0.8045 0.1918 0.5795 0.3290 0.7296 0.9661 0.8417 0.4322 0.3425 0.8539 0.1077 0.4708 0.4340 0.3933 0.3303 0.7820 0.7344 0.4992 0.7586 0.9642 0.9607 0.5449 0.2362 0.3217 0.0573 0.5500 0.5746 0.0740 0.8235 0.1572 0.2822 0.3274 0.6290 0.5364 0.9495 0.8766 0.1682 0.1475 0.1726 0.9654 0.9958 0.4072 0.4900 0.9518 0.4734 0.7550 0.4443 0.7000 0.9827 0.4097 0.2692 0.1893 0.4017 0.1995 0.4424 0.5875 0.1898 0.9194 0.8009 0.5920 0.4843 0.8502 0.5559 0.3164 0.8014 0.0337 0.2448 0.6822 0.9138 0.1172 0.7882 0.0410 0.4026 0.0419 0.3005 0.0657 0.3261 0.2607 0.5235 0.2774 0.3124 0.7538 0.7401 0.2160 0.3764 0.1029 0.6114 0.0423 0.9861 0.8363 0.2756 0.6467 0.7691 0.9012 0.2940 0.6013 0.1736 0.8238 0.6903 0.4683 0.0435 0.2153 0.3781 0.3374 0.2396 0.0657 0.8695 0.4397 0.3174 0.3921 0.7081 0.0927 0.6641 Columns 20 through 25 0.2415 0.7295 0.9767 0.9107 0.1318 0.7118 0.0106 0.5105 0.3614 0.6143 0.7640 0.8465 0.0204 0.5359 0.8440 0.4746 0.5335 0.3952 0.3177 0.3204 0.1051 0.8214 0.3956 0.1964 0.7589 0.0027 0.0980 0.0290 0.3765 0.0310 0.5318 0.6930 0.7368 0.3657 0.7719 0.1206 0.8294 0.6023 0.9826 0.5895 0.4044 0.6841 0.2005 0.7721 0.1879 0.2124 0.6136 0.5076 0.1762 0.0809 0.2578 0.1787 0.9215 0.9610 0.8973 0.8553 0.3136 0.3753 0.0828 0.3849 (:,:,5) = Columns 1 through 19 0.9255 0.6909 0.4158 0.2962 0.7614 0.8419 0.1654 0.4302 0.0222 0.1194 0.4118 0.8931 0.6330 0.7192 0.4322 0.2011 0.2726 0.9072 0.1600 0.8773 0.4293 0.6849 0.2809 0.3280 0.1068 0.2722 0.2647 0.3641 0.5543 0.1652 0.7239 0.3740 0.8143 0.3968 0.7299 0.7016 0.2639 0.0332 0.7718 0.3380 0.0489 0.8560 0.7551 0.1411 0.5408 0.4414 0.0513 0.8026 1.0000 0.0751 0.5718 0.8551 0.5188 0.3871 0.0247 0.1508 0.5312 0.0831 0.2789 0.0179 0.6262 0.8167 0.3241 0.2109 0.7512 0.1503 0.8854 0.9613 0.2702 0.2072 0.3297 0.1601 0.5885 0.8163 0.7043 0.2722 0.8001 0.7793 0.5528 0.4243 0.4869 0.9964 0.0846 0.2339 0.6096 0.4706 0.6881 0.8045 0.1918 0.5795 0.3290 0.7296 0.9661 0.8417 0.4322 0.0464 0.1892 0.8462 0.6369 0.9851 0.5386 0.4330 0.4899 0.2925 0.3641 0.7586 0.9642 0.9607 0.5449 0.2362 0.3217 0.0573 0.5500 0.5746 0.8209 0.3883 0.0739 0.0371 0.8075 0.4756 0.8898 0.5960 0.0507 0.0921 0.1475 0.1726 0.9654 0.9958 0.4072 0.4900 0.9518 0.4734 0.7550 0.1983 0.1037 0.2933 0.7815 0.2867 0.6074 0.0632 0.8178 0.9912 0.7856 0.1898 0.9194 0.8009 0.5920 0.4843 0.8502 0.5559 0.3164 0.8014 0.9895 0.7791 0.6516 0.1358 0.7782 0.7617 0.0669 0.1958 0.1749 0.5044 0.0657 0.3261 0.2607 0.5235 0.2774 0.3124 0.7538 0.7401 0.2160 0.4778 0.2705 0.3805 0.5815 0.8126 0.0539 0.0552 0.0603 0.1992 0.8039 0.2940 0.6013 0.1736 0.8238 0.6903 0.4683 0.0435 0.2153 0.3781 Columns 20 through 25 0.8224 0.5720 0.2752 0.6638 0.9715 0.0297 0.9909 0.0442 0.9355 0.4878 0.3770 0.2785 0.5501 0.1578 0.6124 0.7138 0.7429 0.3901 0.3613 0.4253 0.2086 0.1753 0.7646 0.7250 0.3425 0.8539 0.1077 0.4708 0.4340 0.3933 0.0740 0.8235 0.1572 0.2822 0.3274 0.6290 0.4443 0.7000 0.9827 0.4097 0.2692 0.1893 0.0337 0.2448 0.6822 0.9138 0.1172 0.7882 0.3764 0.1029 0.6114 0.0423 0.9861 0.8363 0.3374 0.2396 0.0657 0.8695 0.4397 0.3174 (:,:,6) = Columns 1 through 19 0.0033 0.2927 0.4264 0.1332 0.2415 0.7295 0.9767 0.9107 0.1318 0.7118 0.9255 0.6909 0.4158 0.2962 0.7614 0.8419 0.1654 0.4302 0.0222 0.1678 0.4385 0.4717 0.4377 0.0106 0.5105 0.3614 0.6143 0.7640 0.8465 0.8773 0.4293 0.6849 0.2809 0.3280 0.1068 0.2722 0.2647 0.3641 0.6661 0.8665 0.8876 0.7462 0.0204 0.5359 0.8440 0.4746 0.5335 0.3952 0.7718 0.3380 0.0489 0.8560 0.7551 0.1411 0.5408 0.4414 0.0513 0.7851 0.9598 0.5317 0.9935 0.3177 0.3204 0.1051 0.8214 0.3956 0.1964 0.0831 0.2789 0.0179 0.6262 0.8167 0.3241 0.2109 0.7512 0.1503 0.3303 0.7820 0.7344 0.4992 0.7589 0.0027 0.0980 0.0290 0.3765 0.0310 0.8001 0.7793 0.5528 0.4243 0.4869 0.9964 0.0846 0.2339 0.6096 0.5364 0.9495 0.8766 0.1682 0.5318 0.6930 0.7368 0.3657 0.7719 0.1206 0.0464 0.1892 0.8462 0.6369 0.9851 0.5386 0.4330 0.4899 0.2925 0.4017 0.1995 0.4424 0.5875 0.8294 0.6023 0.9826 0.5895 0.4044 0.6841 0.8209 0.3883 0.0739 0.0371 0.8075 0.4756 0.8898 0.5960 0.0507 0.0410 0.4026 0.0419 0.3005 0.2005 0.7721 0.1879 0.2124 0.6136 0.5076 0.1983 0.1037 0.2933 0.7815 0.2867 0.6074 0.0632 0.8178 0.9912 0.2756 0.6467 0.7691 0.9012 0.1762 0.0809 0.2578 0.1787 0.9215 0.9610 0.9895 0.7791 0.6516 0.1358 0.7782 0.7617 0.0669 0.1958 0.1749 0.3921 0.7081 0.0927 0.6641 0.8973 0.8553 0.3136 0.3753 0.0828 0.3849 0.4778 0.2705 0.3805 0.5815 0.8126 0.0539 0.0552 0.0603 0.1992 Columns 20 through 25 0.1194 0.4118 0.8931 0.6330 0.7192 0.4322 0.5543 0.1652 0.7239 0.3740 0.8143 0.3968 0.8026 1.0000 0.0751 0.5718 0.8551 0.5188 0.8854 0.9613 0.2702 0.2072 0.3297 0.1601 0.4706 0.6881 0.8045 0.1918 0.5795 0.3290 0.3641 0.7586 0.9642 0.9607 0.5449 0.2362 0.0921 0.1475 0.1726 0.9654 0.9958 0.4072 0.7856 0.1898 0.9194 0.8009 0.5920 0.4843 0.5044 0.0657 0.3261 0.2607 0.5235 0.2774 0.8039 0.2940 0.6013 0.1736 0.8238 0.6903 (:,:,7) = Columns 1 through 19 0.2011 0.2726 0.9072 0.1600 0.8224 0.5720 0.2752 0.6638 0.9715 0.0297 0.0033 0.2927 0.4264 0.1332 0.2415 0.7295 0.9767 0.9107 0.1318 0.7299 0.7016 0.2639 0.0332 0.9909 0.0442 0.9355 0.4878 0.3770 0.2785 0.1678 0.4385 0.4717 0.4377 0.0106 0.5105 0.3614 0.6143 0.7640 0.3871 0.0247 0.1508 0.5312 0.5501 0.1578 0.6124 0.7138 0.7429 0.3901 0.6661 0.8665 0.8876 0.7462 0.0204 0.5359 0.8440 0.4746 0.5335 0.5885 0.8163 0.7043 0.2722 0.3613 0.4253 0.2086 0.1753 0.7646 0.7250 0.7851 0.9598 0.5317 0.9935 0.3177 0.3204 0.1051 0.8214 0.3956 0.7296 0.9661 0.8417 0.4322 0.3425 0.8539 0.1077 0.4708 0.4340 0.3933 0.3303 0.7820 0.7344 0.4992 0.7589 0.0027 0.0980 0.0290 0.3765 0.3217 0.0573 0.5500 0.5746 0.0740 0.8235 0.1572 0.2822 0.3274 0.6290 0.5364 0.9495 0.8766 0.1682 0.5318 0.6930 0.7368 0.3657 0.7719 0.4900 0.9518 0.4734 0.7550 0.4443 0.7000 0.9827 0.4097 0.2692 0.1893 0.4017 0.1995 0.4424 0.5875 0.8294 0.6023 0.9826 0.5895 0.4044 0.8502 0.5559 0.3164 0.8014 0.0337 0.2448 0.6822 0.9138 0.1172 0.7882 0.0410 0.4026 0.0419 0.3005 0.2005 0.7721 0.1879 0.2124 0.6136 0.3124 0.7538 0.7401 0.2160 0.3764 0.1029 0.6114 0.0423 0.9861 0.8363 0.2756 0.6467 0.7691 0.9012 0.1762 0.0809 0.2578 0.1787 0.9215 0.4683 0.0435 0.2153 0.3781 0.3374 0.2396 0.0657 0.8695 0.4397 0.3174 0.3921 0.7081 0.0927 0.6641 0.8973 0.8553 0.3136 0.3753 0.0828 Columns 20 through 25 0.7118 0.9255 0.6909 0.4158 0.2962 0.7614 0.8465 0.8773 0.4293 0.6849 0.2809 0.3280 0.3952 0.7718 0.3380 0.0489 0.8560 0.7551 0.1964 0.0831 0.2789 0.0179 0.6262 0.8167 0.0310 0.8001 0.7793 0.5528 0.4243 0.4869 0.1206 0.0464 0.1892 0.8462 0.6369 0.9851 0.6841 0.8209 0.3883 0.0739 0.0371 0.8075 0.5076 0.1983 0.1037 0.2933 0.7815 0.2867 0.9610 0.9895 0.7791 0.6516 0.1358 0.7782 0.3849 0.4778 0.2705 0.3805 0.5815 0.8126
  6 comentarios
Francois Miguet
Francois Miguet el 12 de Abr. de 2023
Editada: Adam Danz el 13 de Abr. de 2023
@Vilém Frynta weirdly it is the only option I see...
Walter Roberson
Walter Roberson el 12 de Abr. de 2023
(I moved responses around so you can accept the posting from @Vilém Frynta )

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by