Сгенерируйте матрицу перечисления в MATLAB [duplicate]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
32
задан chappjc 3 March 2015 в 19:28
поделиться

4 ответа

Попробуйте функцию ALLCOMB в FileExchange.

Если вы храните векторы в массиве ячеек, вы можете запустить его следующим образом:

a = {[1 2], [1 2], [4 5]};
allcomb(a{:})
ans =

     1     1     4
     1     1     5
     1     2     4
     1     2     5
     2     1     4
     2     1     5
     2     2     4
     2     2     5
16
ответ дан yuk 20 August 2018 в 10:51
поделиться
  • 1
    Обратите внимание, что ALLCOMB использует NDGRID по существу так же, как в ответе Amro, с ошибкой проверки сверху. – lodhb 21 May 2013 в 23:42
  • 2
    Да, спасибо, что я искал .. :-) – tim 29 November 2013 в 00:01

мы также можем использовать инструкцию «combvec» в matlab

    no_inp=3 % number of inputs we want...in this case we have 3 inputs                  
    a=[1 2 3]
    b=[1 2 3]
    c=[1 2 3]

    pre_final=combvec(c,b,a)';
    final=zeros(size(pre_final));

    for i=1:no_inp
    final(:,i)=pre_final(:,no_inp-i+1);
    end
    final 

. Надеемся, что это поможет. Удачи.

0
ответ дан Akhil Appu Shetty 20 August 2018 в 10:51
поделиться

Рассмотрите это решение, используя функцию NDGRID :

sets = {[1 2], [1 2], [4 5]};
[x y z] = ndgrid(sets{:});
cartProd = [x(:) y(:) z(:)];

cartProd =
     1     1     4
     2     1     4
     1     2     4
     2     2     4
     1     1     5
     2     1     5
     1     2     5
     2     2     5

Или, если вы хотите общее решение для любого числа наборов (без необходимости создавать переменные вручную) используйте это определение функции:

function result = cartesianProduct(sets)
    c = cell(1, numel(sets));
    [c{:}] = ndgrid( sets{:} );
    result = cell2mat( cellfun(@(v)v(:), c, 'UniformOutput',false) );
end

Обратите внимание, что если вы предпочитаете, вы можете отсортировать результаты:

cartProd = sortrows(cartProd, 1:numel(sets));

Кроме того, приведенный выше код не проверяет, множества не имеют повторяющихся значений (например: {[1 1] [1 2] [4 5]}). Добавьте эту строку, если хотите:

sets = cellfun(@unique, sets, 'UniformOutput',false);
47
ответ дан Amro 20 August 2018 в 10:51
поделиться
11
ответ дан Community 20 August 2018 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: