首页 > 解决方案 > 在 Matlab R2018a 与 R2020b 中将双数组与字符串数组连接起来

问题描述

我正在尝试使用该函数在第三维上连接一个 3x3x2 双数组 ( AA) 和一个 3x3 字符串数组 ( ) 。BBcat

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(由于某些限制,我目前无法升级版本)?

标签: arraysmatlabmatrixconcatenation

解决方案


我最初认为这是有问题的不同类型。但我了解到,当连接双精度数组和字符串数组时,双精度数组会转换为字符串数组。

似乎 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,...)为对该函数的调用。


推荐阅读