错误使用 cell/ismember 类 double 的输入 A 和类 cell 的输入 B 必须为字符向量元胞数组,除非其中某个输入为字符向量。 出错 untitled4 (第 28 行) [~, index] = ismember(data0{i,1}, C1);
时间: 2024-04-21 22:28:49 浏览: 17
这个错误提示是因为 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 数组中的字符向量进行匹配了。
相关问题
idx = ismember(uniqueData(:, {1,2,3,4,5}), breakpointData(:, {1,2,3,4,5}));报错表变量下标必须为包含正实整数的数值数组、逻辑数组、字符向量、字符串数组或字符向量元胞数组。应该怎么改
抱歉,我之前的回答有误。在`ismember`函数中,我们需要传递列名或列索引来指定要比较的列。下面是修改后的代码:
```matlab
% 假设uniqueData和breakpointData是两个table类型的变量
% 获取uniqueData中与breakpointData中相同的数据行的逻辑索引
idx = ismember(uniqueData(:, {'time', 'icao', 'lat', 'lon', 'spd'}), breakpointData(:, {'time', 'icao', 'lat', 'lon', 'spd'}), 'rows');
% 删除相同的数据行
uniqueData(idx, :) = [];
```
在上述代码中,我们使用`'rows'`参数来指定按行比较。同时,我们使用列名`'time'`、`'icao'`、`'lat'`、`'lon'`和`'spd'`来指定要比较的列。
请确保列名与实际情况相符,以及变量名正确。如果仍然遇到问题,请提供更多关于数据和错误信息的细节,以便我能够更好地帮助你解决问题。
matlab 怎么判断矩阵A里面的元素是否在元胞数组B里面
可以使用ismember函数来判断矩阵A中的元素是否在元胞数组B中,具体代码如下:
```matlab
A = [1 2 3; 4 5 6; 7 8 9]; % 定义矩阵A
B = {1, 3, 5, 7}; % 定义元胞数组B
C = ismember(A, [B{:}]); % 判断A中的元素是否在B中
```
其中,[B{:}]将元胞数组B转换为一个行向量,ismember函数会将A中的每个元素与该行向量中的元素进行比较,返回一个与A相同大小的逻辑数组C,其元素为1表示该元素在B中出现过,为0表示该元素在B中未出现。