Matlab cat()函数:索引超过矩阵维数

Matlab cat()函数:索引超过矩阵维数,matlab,indexing,concatenation,Matlab,Indexing,Concatenation,我试图将1->(a-1)+(a+1)->n中的数字数组连接起来 我正在使用cat函数 cat(2, 1:a-1, a+1:n) 但是我得到了错误 Index exceeds matrix dimensions. 除非我完全错了,我只是想把两个数字矩阵串联起来,所以我不太清楚为什么会出现这个错误 我正在努力做到这一点: >> a = 3; >> n = 10; >> cat(2, 1:a-1, a+1:n) ans = [1,2,4,5,6,7,8

我试图将1->(a-1)+(a+1)->n中的数字数组连接起来

我正在使用cat函数

cat(2, 1:a-1, a+1:n)
但是我得到了错误

Index exceeds matrix dimensions.
除非我完全错了,我只是想把两个数字矩阵串联起来,所以我不太清楚为什么会出现这个错误

我正在努力做到这一点:

>> a = 3;
>> n = 10;
>> cat(2, 1:a-1, a+1:n)
ans = 
    [1,2,4,5,6,7,8,9,10]

这样做不对吗?知道为什么会出现此错误吗?

您的工作区中是否有名为
cat
的变量

>> cat(2, 2:3, 4:6)                   # this works fine
ans =
     2     3     4     5     6
>> cat = 1:3;                         # introduce the variable 'cat'
>> cat(2, 2:3, 4:6)                   # now it breaks
??? Index exceeds matrix dimensions.

工作区中似乎有一个名为
cat
的变量。当然,最简单的方法是重命名变量:如果您有足够新的Matlab版本(我认为是R2012x),您可以在分配给它的第一行中替换
cat
(选择变量以查看窗口右侧的灰色记号,指示变量在函数中出现的位置),并使用
shift+enter
替换所有出现的项。或者您可以使用Find/Replace all函数(确保只替换单词,而不是子字符串)

如果无法替换现有变量名,则可以使用方括号沿第一个和/或第二个维度进行连接:

cat(2,a,b)
相当于

[a,b]

为了完整性,您尝试实现的连接也可以这样实现:

R = 1:n;
R = R(R ~= a)
我个人认为这看起来比以前干净

R = [1:a-1 a+1:n]

但这是个人的;我总是对像
1:a-1>5
(它是
((1:a)-1)>5
还是
(1:a-1))>5
或者
(1:a)-(1>5)
或者……)这样的东西感到有点困惑。我总是需要思考一秒钟,而我却能立即理解我的解决方案。

事实上是的,这是一个结构。有没有任何方法可以在不更改变量名称的情况下执行此操作?(我没有写这篇文章,只是尝试为某人调试,并希望尽可能少地更改)。最好的做法是更改变量的名称。告诉你的朋友,从长远来看这会更好。让您的变量与内置的Matlab函数共享名称是一个非常非常糟糕的主意。如果他们真的不想更改它,您可以使用
horzcat(1:a-1,a+1:n)
而不是
cat(2,1:a-1,a+1:n)
,或者只使用Matlab的数组串联语法:
[1:a-1,a+1:n]
。我只是做了一个查找/替换。现在一切正常。非常感谢much@user1653208没问题。欢迎来到堆栈溢出。您可以随意使用upvote/accept按钮,如您认为合适:)