2013-04-24 4 views
-2

мне нужно нашло место 1 цифры в массиве и число цифры 0 до 1 Это означает, что в приведенном ниже массив, мне нужно, чтобы достичь placeOfOne=3numberOfZeros=2 в:массива в Matlab

a = [0 0 1 0] 

У нас есть любая функция для этого? Лучшее, Elnaz

ответ

2

После вашего примера, я предполагаю, что ваш входной вектор содержит только двоичные значения «1» и «0».

Если вы ищете позицию «1», используйте find, как и все предлагаемые. Число нулей всегда должно быть положение «1» минус число предшествующих «1»:

placeOfOne = find(a); 
numberOfZeros = placeOfOne - (1:numel(placeOfOne)); 

Если вы ищете только для первого «1», добавить второй параметр. Это сводится к:

placeOfOne = find(a, 1); 
numberOfZeros = placeOfOne - 1; 
+1

Это нужно найти (a, 1) вместо find (a, 'first'). Это лучшее решение. – Navan

+0

@ Наван, да, ты прав. Длинный день ... :) Спасибо! –

+1

спасибо всем !! :) – user2286747

1

Используйте find, чтобы получить место 1

placeOfOne = find(a) 

А потом суммировать нули до этого:

numberOfZeros = sum(a(1:placeOfOne) == 0) 
0

Вы можете использовать функцию isMember, если есть другие элементы чем 0 и 1.

Кроме того, если есть только 0 и 1, число нулей должно быть только (position of 1) - 1, не так ли?

0

Немного другой подход

a = [0 0 1 0]; 
placeOfOne = find(a==1); 
digitsBeforeOne = a(1:placeOfOne); 
numberOfZeros= length(find(digitsBeforeOne ==0)); 
+1

'lenght (найти (d == 0))' ??? что случилось с 'nnz (d == 0)'? – Shai

+0

Спасибо Shai, я не знал о функции nnz. – DaveH

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