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-столбную матрицу без строк, следовательно, количество столбцов согласуется.
Это потому, что программист сделал так? [MATLAB] (http://kr.mathworks.com/help/matlab/math/empty-matrices-scalars-and-vectors.html): * Объединение пустой матрицы в вектор не влияет на результирующий вектор. Пустая матрица в этом случае игнорируется: *. Октав, я не могу найти подобную статью. – Jeon
@Jeon «Это потому, что программист сделал это» и «Я не могу найти подобную статью» вообще не предоставляют никакой информации о том, почему поведение отличается от MATLAB и Octave. Кто бы ни запустил это: подумайте, почему этот вопрос не показывает каких-либо исследовательских усилий, непонятно или не полезно? – dasdingonesin