我一直在尝试编写一个根据矩阵的“类值”对矩阵进行划分的函数。例如,如果我们说向量输入的“类”是最后一列中的值,那么我想分割一个矩阵
[1 2 1; ...
3 4 0; ...
1 3 1; ...
6 7 2; ...
6 7 0; ...
6 7 1]
为(基于最后一列的值)
(Class 1)
[1 2 1; ...
1 3 1; ...
6 7 1]
and
(Class 0)
[3 4 0; ...
6 7 0]
and
(Class 2)
[6 7 2]
我希望格式尽可能接近Python字典,因此我选择了容器映射。但是我在容器映射的键类型方面遇到了一些问题。
这是我编写的功能。
function [separated] = separateByClass(dataset)
% assume the class variable is the last column of the dataset
% We return a container map mapping the unique class variables to the
% row instances from the dataset
separated = containers.Map; % setting up the container map
for i=1:size(dataset, 1)
vector = dataset(i, :);
class_var = vector(end);
if isKey(separated, class_var)== 0
separated(class_var) = vector;
else
separated(class_var) = [separated(class_var); vector];
end
end
end
在循环的第一次迭代过程中,在行separated(class_var) = vector;
上收到一条错误消息。
Error using containers.Map/subsasgn
Specified key type does not match the type expected for this container.
Error in separateByClass (line 12)
separated(class_var) = vector;
问题不是我要添加到空容器映射,因此键类型不匹配吗?
答案 0 :(得分:0)
问题使用的是容器映射根据-设置的默认类型- https://in.mathworks.com/help/matlab/ref/containers.map.html
只需要将keyType和valueType更改为'any',就可以处理双精度键和矩阵值!