arrays - 在 Matlab R2018a 与 R2020b 中将双数组与字符串数组连接起来
问题描述
我正在尝试使用该函数在第三维上连接一个 3x3x2 双数组 ( AA
) 和一个 3x3 字符串数组 ( ) 。BB
cat
AA = zeros(3,3,2)
BB = ["blue" , "yellow" , "red" ; "car" , "bike" , "van" ; "apple" , "pear" , "orange"]
Z = cat(3,AA,BB)
虽然这三行代码在 Matlab R2020b 中工作,但在 Matlab R2018a 中我收到此错误:
使用猫时出错。被连接的数组的维度不一致。
任何解决方法使其适用于 Matlab R2018a(由于某些限制,我目前无法升级版本)?
解决方案
我最初认为这是有问题的不同类型。但我了解到,当连接双精度数组和字符串数组时,双精度数组会转换为字符串数组。
似乎 R2018a(以及我在这里使用的 R2017a)中存在一个错误,它破坏了这个特定的用例。这工作得很好:
AA = zeros(3,3,1);
BB = ["blue", "yellow", "red"; "car", "bike", "van"; "apple", "pear", "orange"];
Z = cat(3,AA,BB);
为了避免这个错误,我们可以cat
自己编写一个函数。这段代码专门用于沿第三维连接,假设它们没问题,它不会打扰测试数组的大小。
sz = size(AA);
n = size(AA,3);
sz(3) = n + size(BB,3);
% Here we assume size(BB,1)==sz(1) and size(BB,2)==sz(2)
Z = strings(sz);
Z(:,:,1:n) = AA;
Z(:,:,n+1:end) = BB;
我建议您使用此代码创建一个函数,并将您的调用替换cat(3,...)
为对该函数的调用。