Как я могу сжать одноэлементное измерение после получения SubArray?
У меня есть двумерный массив 'v', представляющий список векторов, и у меня есть трехмерный массив 'a', который представляет список матриц
ILArray v = counter(2, 3);
ILArray a = counter(2, 3, 3);
Теперь я хочу взять подмассив обоих и сделать умножение матрицы:
ILArray av = multiply(a[1,full,full], v[1,full]);
Он будет жаловаться, что размеры не совпадают, и это потому, что размеры a[1,full,full]
является (1,3,3)
и из v[1,full]
является (1,3)
, Другими словами, подмассивы содержат одноэлементное измерение. В Matlab я могу удалить эти размеры синглтона с помощью squeeze(). Но как я могу сделать это в ILNumerics?
Я только что обнаружил, что если одноэлементные измерения замыкаются, то они автоматически удаляются ILNumerics, так что это работает:
ILArray v = counter(3, 2);
ILArray a = counter(3, 3, 2);
ILArray av = multiply(a[full,full, 1], v[full, 1]);
Также, a[full,full,1]
имеет размерность (3,3)
и не (3,3,1)
,
Означает ли это, что ILNumerics не поддерживает одноэлементные измерения без запаздывания? Другими словами, не поддерживает ли пошаговые массивы в вычислениях, а только смежные? Это было бы довольно ограничительным по меньшей мере.
Спасибо Люк
1 ответ
Разве простое изменение формы не должно сработать?
ILArray<int> I = ILMath.counter<int>(1,1,ILMath.size(5,4,3));
I
<Int32> [5,4,3]
[0]: (:,:,0)
[1]: 1 6 11 16
[2]: 2 7 12 17
[3]: 3 8 13 18
[4]: 4 9 14 19
[5]: 5 10 15 20
[6]: (:,:,1)
[7]: 21 26 31 36
[8]: 22 27 32 37
[9]: 23 28 33 38
[10]: 24 29 34 39
[11]: 25 30 35 40
[12]: (:,:,2)
[13]: 41 46 51 56
[14]: 42 47 52 57
[15]: 43 48 53 58
[16]: 44 49 54 59
[17]: 45 50 55 60
I["0;:;:"]
<Int32> [1,4,3]
[0]: (:,:,0)
[1]: 1 6 11 16
[2]: (:,:,1)
[3]: 21 26 31 36
[4]: (:,:,2)
[5]: 41 46 51 56
ILMath.reshape(I["0;:;:"],4,3)
<Int32> [4,3]
[0]: 1 21 41
[1]: 6 26 46
[2]: 11 31 51
[3]: 16 36 56
Иметь squeeze
Функция была бы более удобной. Вы можете открыть запрос на функцию отслеживания ошибок, чтобы он был реализован в одном из следующих выпусков: http://ilnumerics.net/mantis