2014-10-18 3 views
1

У меня есть несколько векторов разных размеров, их значение находится между 0 и 1. Я хочу сохранить те индексы элементов, которые будут иметь изменения в десятичной системе. Для небольшого примера, давайте предположим,MATLAB: изменения в векторных элементах

 V=[0.02,0.1,0.4,0.0054,0.05]; 

Теперь ouptput для этого должно быть

 i={2,4,5} 

пожалуйста дайте мне знать, как это можно сделать?

+2

Может быть, когда вы используете 'найти (дифф (этаж (log10 (V))) ~ = 0) +1 ', для вас достаточно выхода. – Nemesis

+0

@Nemesis Сделайте это ответом. И вы можете удалить '~ = 0' –

ответ

0

Как предложено @Luis Mendo (включая его предложение с удалением ~ = 0), здесь комментарий как ответ. Вы можете использовать функцию логарифма, чтобы определить количество десятичных знаков для вас.

i = find(diff(floor(log10(V))))+1 

Обязательно используйте слово иметь целые значения можно сравнить с 0.

0
count = arrayfun(@(x) regexp(num2str(x),'\.','split'),V, 'UniformOutput', false) 
dp = cell2mat(arrayfun(@(x) length(x{2}),count, 'UniformOutput', false)) 
find(diff(dp))+1 

Я сделал это таким образом. Сначала я разделяю числа, а затем набираю длину второго слагаемого и, наконец, обнаруживаю, отличается ли длина от предыдущего.