clear clc pathname = uigetdir; name_list=dir(pathname); for i=3:22 name_list(i).引用了不存在的字段 'num'。 出错 LoadData (line 33)num=zeros(20,1); name_list(i).num(i-2)=1; end %pathname = uigetdir; img_name1=importdata('E:\train.txt'); img_train_num=size(img_name1,1); num=0; for i=1:img_train_num img_name_char=cell2mat(img_name1(i)); label_1(i).name=extractBefore(cell2mat(img_name1(i)),''); imgPath = [pathname,'',label_1(i).name,'',cell2mat(img_name1(i))]; temp = imread(imgPath); train_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata1(:,num)=temp; end for i=1:img_train_num for j=1:20 if strcmp(name_list(j+2).name,label_1(i).name) label_1(i).num=name_list(j+2).num; end end train_y(:,i)=uint8(label_1(i).num); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %pathname = uigetdir; img_name1=importdata('E\test.txt'); img_test_num=size(img_name1,1); num=0; for i=1:img_test_num img_name_char=cell2mat(img_name1(i)); label_2(i).name=extractBefore(cell2mat(img_name1(i)),''); imgPath = [pathname,'',label_2(i).name,'',cell2mat(img_name1(i))]; temp = imread(imgPath); test_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata2(:,num)=temp; end for i=1:img_test_num for j=1:20 if strcmp(name_list(j+2).name,label_2(i).name) label_2(i).num=name_list(j+2).num; end end test_y(:,i)=uint8(label_2(i).num); end save('E\imgdata_uint8.mat', 'train_x','train_y','test_x','test_y');引用了不存在的字段 'num'。 出错 LoadData (line 33)
时间: 2024-02-03 18:12:46 浏览: 57
这个错误可能是因为在 name_list(i) 结构体中没有名为 "num" 的字段。你可以检查一下 name_list 结构体中的字段,看看哪个字段被错误地引用了。
另外,你可以在循环之前为 "num" 变量赋值,以确保在给结构体字段赋值时不会出现未定义的变量。例如:
```
num = 0;
for i=3:22
name_list(i).num = 0;
name_list(i).num(i-2) = 1;
num = num + 1;
end
```
相关问题
clear clc pathname = uigetdir; name_list=dir(pathname); for i=3:22 name_list(i).num=zeros(20,1); name_list(i).num(i-2)=1; end
这段代码的作用是获取用户选择的文件夹路径,然后遍历该文件夹下的所有文件和文件夹(除去当前目录和上一级目录),将每个文件名存入一个结构体数组中,并为每个文件名添加一个数字编号,编号从1开始,直到数组中存储的最后一个文件名。
具体来说,代码的执行流程如下:
1. 使用 `uigetdir` 函数获取用户选择的文件夹路径,该路径存储在 `pathname` 变量中。
2. 使用 `dir` 函数获取文件夹下的所有文件和文件夹,并将它们存储在 `name_list` 结构体数组中。
3. 循环遍历 `name_list` 数组中的每个元素,其中 `i` 取值范围为 3 到 22,即从第三个元素开始到最后一个元素。
4. 对于每个元素,将其 `num` 字段初始化为一个 20 行 1 列的零向量。
5. 将该元素的 `num` 向量中的第 `i-2` 个元素赋值为 1,表示该元素对应的文件的编号为 `i-2`。
总的来说,这段代码的目的是为文件名添加一个数字编号,以便后续处理和分析。
clear clc pathname = uigetdir; name_list=dir(pathname); for i=3:22 name_list(i).引用了不存在的字段 'num'。 出错 LoadData (line 33)num=zeros(20,1); name_list(i).num(i-2)=1; end %pathname = uigetdir; img_name1=importdata('E:\\train.txt'); img_train_num=size(img_name1,1); num=0; for i=1:img_train_num img_name_char=cell2mat(img_name1(i)); label_1(i).name=extractBefore(cell2mat(img_name1(i)),'_'); imgPath = [pathname,'\',label_1(i).name,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); train_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata1(:,num)=temp; end for i=1:img_train_num for j=1:20 if strcmp(name_list(j+2).name,label_1(i).name) label_1(i).num=name_list(j+2).num; end end train_y(:,i)=uint8(label_1(i).num); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %pathname = uigetdir; img_name1=importdata('E\\test.txt'); img_test_num=size(img_name1,1); num=0; for i=1:img_test_num img_name_char=cell2mat(img_name1(i)); label_2(i).name=extractBefore(cell2mat(img_name1(i)),'_'); imgPath = [pathname,'\',label_2(i).name,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); test_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata2(:,num)=temp; end for i=1:img_test_num for j=1:20 if strcmp(name_list(j+2).name,label_2(i).name) label_2(i).num=name_list(j+2).num; end end test_y(:,i)=uint8(label_2(i).num); end save('E\\imgdata_uint8.mat', 'train_x','train_y','test_x','test_y');
这段代码的作用是从指定文件夹中读取图像数据和标签,并将它们保存到.mat文件中。但是,代码中有一些错误:
1. `name_list(i).num(i-2)=1;` 这行代码是错误的,因为`name_list`结构体中没有`num`这个字段。我猜测你想要的是给`label_1`结构体中的`num`字段赋值,因此应该改为`label_1(i).num=1;`。
2. `img_name1=importdata('E:\\train.txt');` 和 `img_name1=importdata('E\\test.txt');` 这两行代码中的路径分隔符不一致,应该都使用反斜杠`\`。
3. `save('E\\imgdata_uint8.mat', 'train_x','train_y','test_x','test_y');` 这行代码中的路径分隔符也应该改为反斜杠`\`。另外,如果你想要在`E:`盘保存文件,应该使用双反斜杠`\\`,因为单反斜杠`\`是转义符。
修改后的代码如下:
```
clear
clc
pathname = uigetdir;
name_list = dir(pathname);
for i = 3:22
label_1(i-2).num = 0;
end
img_name1 = importdata('E:\train.txt');
img_train_num = size(img_name1, 1);
for i = 1:img_train_num
img_name_char = cell2mat(img_name1(i));
label_1(i).name = extractBefore(cell2mat(img_name1(i)), '_');
imgPath = [pathname, '\', label_1(i).name, '\', cell2mat(img_name1(i))];
temp = imread(imgPath);
train_x(:,:,i) = temp;
end
for i = 1:img_train_num
for j = 1:20
if strcmp(name_list(j+2).name, label_1(i).name)
label_1(i).num = name_list(j+2).num;
end
end
train_y(:,i) = uint8(label_1(i).num);
end
for i = 1:img_train_num
label_2(i).num = 0;
end
img_name1 = importdata('E:\test.txt');
img_test_num = size(img_name1, 1);
for i = 1:img_test_num
img_name_char = cell2mat(img_name1(i));
label_2(i).name = extractBefore(cell2mat(img_name1(i)), '_');
imgPath = [pathname, '\', label_2(i).name, '\', cell2mat(img_name1(i))];
temp = imread(imgPath);
test_x(:,:,i) = temp;
end
for i = 1:img_test_num
for j = 1:20
if strcmp(name_list(j+2).name, label_2(i).name)
label_2(i).num = name_list(j+2).num;
end
end
test_y(:,i) = uint8(label_2(i).num);
end
save('E:\imgdata_uint8.mat', 'train_x', 'train_y', 'test_x', 'test_y');
```
阅读全文