2016-09-16 5 views
1

Я пытаюсь запустить код MATLAB в октаву, но застрял в следующий пункт:Почему Octave печатает «несоответствие размеров», в то время как MATLAB - нет?

I является пустой матрицей, размеры 0х4,

a = 2; 

Команда, принадлежащая для цикла, это: выход

I = [I a]; 

MATLAB: I = 2

выход октавных: «горизонтальный dimensio ns mismatch (0x4 vs 1x1) «

Я нашел способ обойти эту ошибку, но я также хотел бы понять: почему MATLAB принимает эти разные размеры, в то время как Octave печатает ошибку? Есть ли другое определение относительно пустых матриц и их расширение? (Специально потому, что он не является «нормальной» пустой матрица, но 0x4 пустой матрица?)

+0

Это потому, что программист сделал так? [MATLAB] (http://kr.mathworks.com/help/matlab/math/empty-matrices-scalars-and-vectors.html): * Объединение пустой матрицы в вектор не влияет на результирующий вектор. Пустая матрица в этом случае игнорируется: *. Октав, я не могу найти подобную статью. – Jeon

+0

@Jeon «Это потому, что программист сделал это» и «Я не могу найти подобную статью» вообще не предоставляют никакой информации о том, почему поведение отличается от MATLAB и Octave. Кто бы ни запустил это: подумайте, почему этот вопрос не показывает каких-либо исследовательских усилий, непонятно или не полезно? – dasdingonesin

ответ

7

Matlab выдает предупреждение, предупреждая о том, что это будет ошибка в будущих версиях:

>> I = magic(4); 
>> I(1:4,:) = [] 
I = 
    Empty matrix: 0-by-4 
>> [I 2] 
Warning: This concatenation operation includes an empty array with an incorrect number of rows. 
Concatenation including empty arrays will require all arrays to have the same number of rows in a future release. 

ans = 
2 

Тот же код на октаву:

>> I = magic(4); 
>> I(1:4,:)=[] 
I = [](0x4) 

>> [I 2] 
error: horizontal dimensions mismatch (0x4 vs 1x1) 

так по существу это та же проблема, кроме Matlab позволяет ему с предупреждением, в данное время, и быть немного более информативна, какой размер на самом деле виноваты в этом, в то время как октава Строго об этом и надеется, что вы выясните, что это имел ввиду . Но по сути поведение такое же.

Это также очень разумное поведение, так как попытка объединить две матрицы разных размеров/размеров, скорее всего, исходит из ошибки, а не из-за предполагаемого поведения, даже если один из массивов стал пустым в процессе, поэтому Матлаб разумно идти по октавному пути здесь (так сказать).


PS. Обратите внимание, что в этом сценарии что-то вроде [I;2 2 2 2] является совершенно корректным и правильным кодом для обоих интерпретаторов: т.е. вы объединяете по вертикали 4-столбчатую матрицу с одной строкой в ​​4-столбную матрицу без строк, следовательно, количество столбцов согласуется.

+0

Вы на R2016b? Я не получаю предупреждение в R2016a. – dasdingonesin

+0

, по общему признанию, нет, я нахожусь на 2013b. Хотя было бы странно, если бы Matlab не следил за таким предупреждением «быть усталым» ... вы ничего не получаете даже в терминале для вышеуказанного кода? –

+0

Я тоже в R2016a и не получаю предупреждение –

 Смежные вопросы

  • Нет связанных вопросов^_^