Как случайным образом выбрать из списка 47 имен, которые вводятся из файла данных? - PullRequest
1 голос
/ 13 ноября 2009

Мне удалось ввести файл числовых данных в матрицу, но я не смог сделать это для любых данных, которые не являются числами.

У меня есть список из 47 имен, и я должен создать случайное имя из списка. Я пытался использовать функцию textcan , но никуда не собирался. Кроме того, как я могу генерировать случайное имя из списка? Все, что мне удалось сделать, это сгенерировать случайное число от 1 до 47.


Ценю ответы. Я должен был сказать, что мне нужно в MATLAB извините.

Вот примерный список данных в моем файле данных

name01
name02
name03

и код для чтения:

fid = fopen('names.dat','rt');
headerChars = fgetl(fid);
data = fscanf(fid,'%f,%f,%f,%f',[4 47]).';
fclose(fid);

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

Ответы [ 3 ]

3 голосов
/ 13 ноября 2009

Редактировать: в соответствии с полезными комментариями от mtrw и исправленным форматированием файла примера данных, я обновил свой ответ более подробно.

С одним именем (то есть "Боб", "Боб Смит" или "Смит, Боб") в каждой строке файла вы можете использовать функцию TEXTSCAN , указав '%s' как аргумент формата (для обозначения чтения строки) и символ новой строки '\n' как 'Delimiter' (символ, который разделяет строки в файле):

fid = fopen('namefile.txt','r');
names = textscan(fid,'%s','Delimiter','\n');
fclose(fid);

Тогда это вопрос случайного выбора одного из имен. Вы можете использовать функцию RANDI , чтобы сгенерировать случайное целое число в диапазоне от 1 до числа имен, считанных из файла (найдено с помощью функции NUMEL ):

names = names{1};  %# Get the contents from the cell returned by TEXTSCAN
selectedName = names{randi(numel(names))};
1 голос
/ 13 ноября 2009

Похоже, ты на полпути домой. Возьмите это случайное число и используйте его в качестве индекса для списка.

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

0 голосов
/ 13 ноября 2009

Используйте функцию RANDOMBETWEEN, чтобы получить случайное число в пределах вашего диапазона. Используйте INDEX, чтобы получить фактическое значение ячейки. Например:

=INDEX(A1:A47, RANDBETWEEN(1, 47))

Вышеуказанное будет работать для вашего конкретного случая с 47 именами, при условии, что они находятся в столбце A. В общем, вы хотели бы что-то вроде:

=INDEX(MyNames, RANDBETWEEN(ROW(MyNames), ROW(MyNames) + ROWS(MyNames) - 1))

Предполагается, что вы назвали свой диапазон ячеек "MyNames" (например, выбрав все ячейки в вашем диапазоне и указав имя в поле имен). Приведенная выше формула работает с использованием функции ROW для возврата верхней строки массива MyNames и функции ROWS для получения общего количества строк в MyNames.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...