Subsetting an n-d array with no loop

4 Ansichten (letzte 30 Tage)
Francois Miguet
Francois Miguet am 12 Apr. 2023
Bearbeitet: Adam Danz am 13 Apr. 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 ?

Akzeptierte Antwort

Vilém Frynta
Vilém Frynta am 12 Apr. 2023
Verschoben: Walter Roberson am 12 Apr. 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 Kommentare
Francois Miguet
Francois Miguet am 12 Apr. 2023
Bearbeitet: Adam Danz am 13 Apr. 2023
@Vilém Frynta weirdly it is the only option I see...
Walter Roberson
Walter Roberson am 12 Apr. 2023
(I moved responses around so you can accept the posting from @Vilém Frynta )

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by