无法在MATLAB中附加到空容器映射

时间:2019-07-15 06:13:22

标签: matlab

我一直在尝试编写一个根据矩阵的“类值”对矩阵进行划分的函数。例如,如果我们说向量输入的“类”是最后一列中的值,那么我想分割一个矩阵

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

问题不是我要添加到空容器映射,因此键类型不匹配吗?

1 个答案:

答案 0 :(得分:0)

问题使用的是容器映射根据-设置的默认类型- https://in.mathworks.com/help/matlab/ref/containers.map.html

只需要将keyType和valueType更改为'any',就可以处理双精度键和矩阵值!