2015-01-31 2 views
1

Я хотел бы пройти через массив/матрицу (вместо использования реляционного оператора ради практики/обучения в этой точке), и если выполняется простое условие, заменяется каждый элемент либо истинным, либо ложным значением, и заканчивается массивом результатов, который имеет логический класс.Matlab: замените каждый элемент значением true/false (логическим массивом)

vec = [5 9 3 4 6 11]; 

[r,c] = size(vec); 

vecempty = zeros(r,c); 

for i = 1:r; 
    for j = 1:c 
     if vec(i,j) > 5; 
      vecempty(i,j) = true; 
     else 
      vecempty(i,j) = false; 
     end 
    end 
end 

fprintf('Your truth matrix: \n\n\n') 

disp(vecempty) 

total = 0; 

for i = 1:r; 
    for j = 1:c; 
     total = total + vecempty(i,j); 
    end 
end 

fprintf('Total number of truth elements: %d \n\n\n', total) 

Для моего "VEC (I, J)" состояние, я изначально имел их "= 1" или "= 0", но я догадался, это просто предоставление число самих, а не истинным или ложным. Таким образом, я пошел с «= true» или «= false», но мне интересно, почему массив, который я возвращаю (vecempty), не отображается как класс логического?

Следуя то же значение:

Vectruth = vec > 5 

результата "Vectruth" возвращаются в качестве логического класса. Я смущен, если я верну «true» или «false» в моем цикле, почему мой результирующий вектор не будет отображаться как логический класс, когда с помощью «vec> 5» он отображается как логический класс? Спасибо.

ответ

1

Вы можете инициализировать логический массив, вызвав

vecempty = false(r,c); 

вместо

vecempty = zeros(r,c); 

Конечно, false можно заменить true, если это необходимо.

+0

Благодарю вас, это действительно приводит к тому, что мой «вацеттист» становится логическим классом. Однако в том, что я сделал выше, есть причина в том, почему мой «вацеттист» не будет признан логическим классом? – pdhami

+0

Когда ваш массив был инициализирован как числовой, и вы пытаетесь присвоить логическое значение одному из своих элементов, Matlab преобразует его в 0 или 1, оставляя массив численным. Если вы по какой-то причине не знали в начале, что вам действительно нужен логический массив, вы можете преобразовать его позже с помощью 'logical (vecempty)'. Но сейчас я не вижу, когда такая ситуация может возникнуть. Может быть, вы можете уточнить? – FliegenderZirkus

+0

Обобщая то, что сказал FliegenderZirkus, когда вы индексируете назначение скобками в инициализированное значение, MATLAB принуждает значение в правой части присваивания к классу значения левой стороны. Таким образом, true и false получают принуждение к удвоению, тип, который был инициализирован vecempty. – SCFrench

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