Получить размеры для набора данных Matlab, Размер Функция - PullRequest
1 голос
/ 04 мая 2010

Здравствуйте. Я пытался отобразить размеры набора данных, ниже приведен следующий код Matlab, который я использовал ... но он дает неправильный вывод .... .... любая помощь по этому вопросу будет высоко ценится

[file_input,pathname]  = uigetfile( ...
    {'*.txt', 'Text (*.txt)'; ...
    '*.xls', 'Excel (*.xls)'; ...
    '*.*', 'All Files (*.*)'}, ...
    'Select files');

    uiimport(file_input)

    [pathstr, name, ext, versn] = fileparts(file_input)


    r = size(name,1);
    c = size(name,2);

    disp(r) 
    disp(c)

Ответы [ 3 ]

2 голосов
/ 04 мая 2010

Во-первых, вам нужно объединить file_input и pathname вместе, чтобы создать полный путь к нужному файлу. Вы можете сделать это с помощью функции FULLFILE :

dataFile = fullfile(pathname,file_input);

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

uiimport(dataFile);                                 %# Load the data
[filePath,fileName,fileExt] = fileparts(dataFile);  %# Get the file name
dataSize = size(eval(fileName));                    %# Get the size of the data
disp(dataSize(1));  %# Display the rows
disp(dataSize(2));  %# Display the columns

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

dataStruct = uiimport(dataFile);                    %# Put the data in a struct
[filePath,fileName,fileExt] = fileparts(dataFile);  %# Get the file name
dataSize = size(dataStruct.(fileName));             %# Get the size of the data
disp(dataSize(1));  %# Display the rows
disp(dataSize(2));  %# Display the columns

Если вам нужно было передать загруженные данные в другую функцию или использовать ее любым другим способом, вы можете сделать следующее:

some_other_fcn(eval(fileName));  %# When loaded with UIIMPORT to a variable
some_other_fcn(dataStruct.(fileName));  %# When loaded with UIIMPORT to a struct
1 голос
/ 04 мая 2010

Я прокомментирую ваш код, чтобы вы могли видеть, что и где происходит.

Кроме того, я предлагаю добавить (для целей отладки) еще два диска, как указано, чтобы вы могли видеть, что происходит.

%# uigetfile reads the name of a file and stores it in file_input, for example 'mydata.dat'
[file_input,pathname]  = uigetfile( ...
{'*.txt', 'Text (*.txt)'; ...
'*.xls', 'Excel (*.xls)'; ...
'*.*', 'All Files (*.*)'}, ...
'Select files');

disp(file_input)

%# fileparts splits file_input into name and extension. pathstr is empty, name is 'mydata', 
%# ext is '.dat', and versn is empty
[pathstr, name, ext, versn] = fileparts(file_input)

disp(name)

%# name is a string containing, in our example, 'mydata'
%# r is the number of rows in the string 'mydata', which is 1
%# c is the number of columns in the string 'mydata', which is 6
r = size(name,1);
c = size(name,2);

disp(r) 
disp(c)

Если вам нужен размер вашего набора данных, вам сначала нужно загрузить набор данных.

В качестве альтернативы, если ваш набор данных всегда имеет фиксированное количество столбцов, например, вы можете попытаться оценить количество строк по размеру файла

%# get the file size (and other information about the file) using dir
d = dir(fullfile(pathname,file_input));

%# if the header contains, say, 10 bytes, and each row is 8 bytes, you find the number of rows
%# as follows
headerBytes = 10;
rowBytes = 8;
nRows = (d.size-headerBytes)/rowBytes;
0 голосов
/ 04 мая 2010

В этом случае name - это имя файла, который будет символьным массивом. Так что r всегда будет 1, а c будет количеством символов в имени файла.

EDIT: Вы, вероятно, хотели вызвать readxls (или аналогичный) для файла, обозначенного file_input.

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