2010-05-04 3 views
1

Bonjour J'ai essayé d'afficher les dimensions d'un ensemble de données, ci-dessous est le code matlab que j'ai utilisé ... mais il me donne la mauvaise sortie .... i'e nombre de valeurs de lignes et les colonnes sont mal .... toute aide à ce sujet serait très appréciéObtenir les cotes pour l'ensemble de données matlab, Taille Fonction

[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) 

Répondre

0

Dans ce cas name est le nom du fichier, qui sera un tableau de caractères. Donc r sera toujours 1, et c sera le nombre de caractères dans le nom de fichier.

EDIT: Vous avez probablement l'intention d'appeler readxls (ou similaire) sur le fichier identifié par file_input.

+0

bonjour .... dimensions dR fait les dimensions d'origine de l'ensemble de données après avoir utilisé la fonction uigetfile ... – Tim

+1

@ Tim: Je pense que vous vous trompez sur l'utilisation de uigetfile. Cette fonction renvoie uniquement le nom de fichier et le chemin en tant que chaînes, pas le contenu du fichier. – Doresoom

+0

Je viens d'éditer le code matlab que je vous ai envoyé, j'ai utilisé uiimport pour importer un jeu de données dans l'espace de travail .... nw d dataset avait un en-tête et d données réelles, nw matlab enregistre les données réelles et textheaders différemment ...... maintenant l'ensemble de données réel est sauvegardé en tant que "données" dans l'espace de travail par défaut .... et montre la vraie dimension .... comment puis-je afficher la dimension de cette variable dans l'espace de travail ???? – Tim

1

Je vais commenter votre code afin que vous puissiez voir ce qui se passe où.

Aussi, je suggère d'ajouter (à des fins de débogage) deux autres disps comme indiqué afin que vous puissiez voir ce qui se passe.

%# 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) 

Si vous voulez la taille de votre ensemble de données, vous devez d'abord charger l'ensemble de données.

Alternativement, si votre ensemble de données a toujours un nombre fixe de colonnes, par exemple, vous pouvez essayer d'estimer le nombre de lignes de la taille du fichier

%# 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

Je viens d'éditer le code matlab que je vous ai envoyé, j'ai utilisé uiimport pour importer un jeu de données dans l'espace de travail .... nw d dataset avait un en-tête et d données réelles, nw matlab enregistre différemment les données réelles et textheaders ......maintenant l'ensemble de données réel est sauvegardé en tant que "données" dans l'espace de travail par défaut .... et montre la vraie dimension .... comment puis-je afficher la dimension de cette variable dans l'espace de travail ???? – Tim

+0

Si le nom de la variable est 'data', vous pouvez obtenir sa taille en utilisant' size (data) ' – Jonas

+0

qui a fonctionné .... merci beaucoup ... mais j'ai quelques questions à poser ..... .Premièrement quand j'utilise le fichier uigetfile pour obtenir le fichier et utiliser uiimport pour importer dans l'espace de travail ..... la commande suivante qui est size (data) s'exécute immédiatement avant que la fonction d uiimport finisse d'exécuter ce qui conduit à une erreur coz d "data "variable n'a pas encore été créée Aussi, dans mon interface graphique .... Je voudrais passer le contenu d de la variable" data "(qui est le jeu de données réel déjà dans l'espace de travail) à une autre fonction spécifiée dans d GUI ..... comment puis-je atteindre le diz? – Tim

2

Tout d'abord, vous devez combiner file_input et pathname ensemble pour créer le chemin d'accès complet au fichier que vous voulez. Vous pouvez le faire avec la fonction FULLFILE:

dataFile = fullfile(pathname,file_input); 

En second lieu, lorsque vous utilisez UIIMPORT vous pouvez choisir le nom de la variable que vous souhaitez que les données de fichier à charger dans. Par défaut, le nom de la variable est le nom du fichier que vous avez chargé si votre fichier ne contient qu'un seul type de données (c'est-à-dire des nombres sans en-tête). Si vous ne modifiez pas le nom de la variable données du fichier:

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 

Vous pouvez aussi le faire en utilisant l'option de sortie des données à partir UIIMPORT comme une structure où les données sont stockées dans un champ (avec le nom du fichier comme nom de champ par défaut):

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 

Si vous avez besoin de transmettre les données chargées à une autre fonction ou de l'utiliser de toute autre manière, vous pouvez effectuer les opérations suivantes:

some_other_fcn(eval(fileName)); %# When loaded with UIIMPORT to a variable 
some_other_fcn(dataStruct.(fileName)); %# When loaded with UIIMPORT to a struct 
Questions connexes