Изменить форму (видимо) бесполезно? - PullRequest
0 голосов
/ 21 ноября 2011

функция изменения формы должна изменить форму матрицы.Но если я попытаюсь использовать его (это также написано в руководстве), я обнаружу, что если я объявлю: reshape (A, m, n);Тогда у A должно быть m строк и n столбцов.Если я пытаюсь использовать передачу формы в качестве аргументов, отличных от этих, я получаю сообщение об ошибке.Таким образом, по-видимому, он не изменяет никакую матрицу, он просто возвращает ту же матрицу, если я передаю m и n в качестве аргументов, и в противном случае возвращает ошибку.Поэтому, если у меня есть матрица 4x4, и я хочу сделать ее меньше: 2x2, я не могу.

Ответы [ 3 ]

6 голосов
/ 21 ноября 2011

Изменяет форму , а не размер массива.Для изменения формы количество элементов не должно меняться.Таким образом, если у вас есть 4x4, вы можете перейти к 8x2 или 2x8 или 16x1 и т. Д., Но не к 2x2 (что вы ожидаете от других элементов?)

4 голосов
/ 21 ноября 2011

Перестановка элементов перестановки;если вы делаете B = reshape(A, u), то логически B должно иметь то же количество элементов (обратите внимание, что size(B) == prod(u)), что и A (length(B(:)) == length(A(:))).Иначе как бы он узнал, какие элементы отбрасывать, если бы у A было больше, или где он получил бы новые, если бы у B было больше?в вектор (возможно, с помощью другой функции), и вам просто нужно вернуть его в прежнюю форму.

Если вы хотите получить меньшую часть матрицы, используйте A(i1:i2, j1:j2).Если вы хотите «разбить» матрицу на части, используйте repmat(A, i, j).

2 голосов
/ 21 ноября 2011

Как говорит @thrope, reshape меняет форму, а не количество элементов.Если у вас есть матрица 4x4, и вы хотите, чтобы ее верхний левый угол 2x2 использовался B=A(1:2,1:2) или нижний правый угол 2x2, B=A(3:4,3:4).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...