错误使用 cellstr 无法从 double 转换为 cellstr。 出错 untitled4 (第 28 行) [~, index] = ismember(cellstr(data0{i,1}), C1);
时间: 2024-04-21 18:28:48 浏览: 169
这个错误提示是因为 cellstr 函数只能将字符向量转换为 cell 数组,而不能将数字或其他类型的数据转换为 cell 数组。因此,你需要先将 data0{i,1} 中的数字转换为字符向量,然后再使用 cellstr 函数将其转换为 cell 数组。可以使用 num2str 函数将数字转换为字符向量。修改后的代码如下:
%% 2.导入数据
data0 = readtable('数据1.xlsx', 'VariableNamingRule', 'preserve');
%% 定义分类列表
C1 = {'优', '良', '轻度污染', '中度污染', '重度污染', '严重污染'};
C2 = [1,2,3,4,5,6];
%% 将数据转换为数值型
data1 = zeros(height(data0), 1);
for i = 1:height(data0)
[~, index] = ismember(cellstr(num2str(data0{i,1})), C1);
data1(i) = C2(index);
end
修改后的代码中,使用 num2str 函数将 data0{i,1} 中的数字转换为字符向量,然后再使用 cellstr 函数将其转换为 cell 数组,这样就可以与 C1 数组中的字符向量进行匹配了。
相关问题
错误使用 cell/ismember 类 double 的输入 A 和类 cell 的输入 B 必须为字符向量元胞数组,除非其中某个输入为字符向量。 出错 untitled4 (第 28 行) [~, index] = ismember(data0{i,1}, C1);
这个错误提示是因为 ismember 函数要求输入的两个参数必须具有相同的类型。在这里,data0{i,1}是一个cell,而C1是一个cell数组,两者类型不同。因此,你需要将data0中的cell转换为字符向量,可以使用cellstr函数来实现。修改后的代码如下:
%% 2.导入数据
data0 = readtable('数据1.xlsx', 'VariableNamingRule', 'preserve');
%% 定义分类列表
C1 = {'优', '良', '轻度污染', '中度污染', '重度污染', '严重污染'};
C2 = [1,2,3,4,5,6];
%% 将数据转换为数值型
data1 = zeros(height(data0), 1);
for i = 1:height(data0)
[~, index] = ismember(cellstr(data0{i,1}), C1);
data1(i) = C2(index);
end
修改后的代码中,使用 cellstr 函数将 data0{i,1} 转换为字符向量,这样就可以与 C1 数组中的字符向量进行匹配了。
数组索引必须为正整数或逻辑值。 出错 untitled4 (第 29 行) data1(i) = C2(index);
这个错误提示是因为 ismember 函数返回的 index 值可能为0,而 MATLAB 中的数组索引必须为正整数或逻辑值,因此不能直接将 index 用作数组的索引。可以在赋值之前先判断 index 是否为0,如果为0则将 data1(i) 赋值为NaN或其他默认值。修改后的代码如下:
%% 2.导入数据
data0 = readtable('数据1.xlsx', 'VariableNamingRule', 'preserve');
%% 定义分类列表
C1 = {'优', '良', '轻度污染', '中度污染', '重度污染', '严重污染'};
C2 = [1,2,3,4,5,6];
%% 将数据转换为数值型
data1 = NaN(height(data0), 1);
for i = 1:height(data0)
[~, index] = ismember(cellstr(num2str(data0{i,1})), C1);
if index ~= 0
data1(i) = C2(index);
end
end
修改后的代码中,先将 data1 的初始值设为 NaN,表示未找到匹配项。在 for 循环中,判断 index 是否为0,如果不为0则将 data1(i) 赋值为 C2(index),否则 data1(i) 的值保持为 NaN。
阅读全文