本文说明如何使用 times 函数来合并分类数组,包括有序分类数组和包含未定义元素的数组。当对两个分类数组调用 times 时,将会输出一个包含新类别的分类数组。新类别集是从输入数组的类别创建的所有有序对集合,即笛卡尔积。times 使用输入数组对应元素的有序对构成输出数组的每个元素。输出数组的大小与输入数组相同。
合并两个分类数组
使用 times 合并两个分类数组。各输入数组必须具有相同的元素数量,但可以包含不同的类别数量。
A = categorical({'blue','red','green'});
B = categorical({'+','-','+'});
C = A.*B
C = 1x3 categorical
blue + red - green +
类别的笛卡尔积
显示 C 的类别。这些类别是可从 A 和 B 的类别创建的所有有序对,也称为笛卡尔积。
categories(C)
ans = 6x1 cell
{'blue +' }
{'blue -' }
{'green +'}
{'green -'}
{'red +' }
{'red -' }
因此,A.*B 并不等于 B.*A。
D = B.*A
D = 1x3 categorical
+ blue - red + green
categories(D)
ans = 6x1 cell
{'+ blue' }
{'+ green'}
{'+ red' }
{'- blue' }
{'- green'}
{'- red' }
使用未定义元素的乘法
合并两个分类数组。如果 A 或 B 包含未定义元素,C 的相应元素也将是 undefined。
A = categorical({'blue','red','green','black'});
B = categorical({'+','-','+','-'});
A = removecats(A,{'black'});
C = A.*B
C = 1x4 categorical
blue + red - green + <undefined>
有序分类数组的笛卡尔积
合并两个有序分类数组。仅当 A 和 B 都是有序的,C 才是有序分类数组。C 的类别排序遵循输入分类数组的排序。
A = categorical({'blue','red','green'},{'green','red','blue'},'Ordinal',true);
B = categorical({'+','-','+'},'Ordinal',true);
C = A.*B;
categories(C)
ans = 6x1 cell
{'green +'}
{'green -'}
{'red +' }
{'red -' }
{'blue +' }
{'blue -' }