Хорошо, это может показаться странным вопросом, но нести меня.Вектор MATLAB: предотвращать последовательные значения из того же диапазона
Так что у меня есть случайный вектор в файле .m с определенными ограничениями, встроенными в него. Вот мой код:
randvecall = randsample(done, done, true);
randvec = randvecall([1;diff(randvecall(:))]~=0);
«Done» только диапазон значений мы берем пробу из, так что не беспокойтесь об этом. Как вы можете видеть, это изменяет диапазон значений, а затем вырезает этот случайный вектор с помощью функции diff, так что удаляются повторяющиеся повторяющиеся значения. По-прежнему существует потенциал для дублирования значений в векторе, но они просто не могут быть последовательными.
Это все хорошо и хорошо, и работает отлично.
Так, скажем, randvec выглядит следующим образом:
randvec =
54
47
52
26
39
2
14
51
24
6
19
56
34
46
12
7
41
18
29
7
Это на самом деле намного больше, с чем-то вроде 60-70 значений, но вы получите точку.
Что я хочу сделать, это добавить немного дополнительного ограничения на этот вектор. Когда я беру выборку из этого вектора, значения классифицируются в соответствии с их диапазоном. Таким образом, значения от 1-15 относятся к категории 1, 16-30 относятся к категории 2 и т. Д. Причины этого несущественны, но это довольно важная часть программы. Поэтому, если вы посмотрите на приведенные выше значения, вы увидите раздел, подобный этому:
7
41
18
29
7
Это действительно плохо для моей программы. Поскольку диапазоны значений обрабатываются отдельно, 41, 18 и 29 используются по-разному, чем 7. Итак, для всех целей и задач 7 появляется последовательно в моем скрипте. То, что я хочу сделать, - это как-то разобрать/изменить/независимо от вектора, когда он сгенерирован, чтобы одно и то же число из определенного диапазона не отображалось дважды «в строке», независимо от того, сколько других чисел из разных диапазонов находится между ними. Имеет ли это смысл/я это хорошо описал? Итак, я хочу, чтобы MATLAB искал вектор, и для всех значений в определенных диапазонах (1-15,16-30,31-45,46-60) убедитесь, что «последовательные» значения из того же диапазона не идентичны.
Итак, вот что я хочу делать. Это никоим образом не может быть лучшим способом сделать это, поэтому любые советы/альтернативы, конечно, оценены. Я знаю, что я могу сделать это лучше с несколькими векторами, но по разным причинам мне нужно, чтобы это был один длинный вектор (как мой сценарий был спроектирован, он просто не работал бы, если бы у меня был отдельный вектор для каждого диапазона значений) ,
Честно говоря, это действительно похоже на странную вещь: D Почему бы не просто сгруппировать первый вектор в начале? – Juhl
подождите секунду, не правда ли ['unique'] (http://www.mathworks.se/help/techdoc/ref/unique.html)? ты ищешь? – Juhl
Разве вы не можете сделать отдельный вектор для каждой категории? – Dan