【发布时间】:2014-05-27 13:28:38
【问题描述】:
以下问题让我很头疼:
我正在用矩阵索引一个维度为 Nx1 的向量 R,即:
R = ones( [ N nSteps ] );
R = (:);
带有索引矩阵。基本上,矩阵的每一行都是一行索引,我需要存储在 R 中的值,这是为了让 R 中的向量与 R 中当前点的不同偏移量。矩阵看起来像以下结果:
k = 0:nSteps;
I = repmat( k , [size(D,2) 1])
I = bsxfun(@minus, I , D');
% later in code, this is used as:
currI = currPoint + currI;
% this is used for indexing just a little later
... R(currI) ...
本例中的 D 是一个存储我想要的不同偏移量的数组。它在大多数情况下都能完美运行,并且由于我可以使用索引,它为我提供了维度 [size(D,2) nSteps] 的数组。
问题从这里开始:偏移量作为参数传递给函数,并且可以变化。每当我尝试只使用一个简单的偏移量时,例如 400,我都会遇到问题。 Matlab 似乎并不关心某些东西是否被 1xN 或 Nx1 向量索引并且总是返回,在这种情况下,向量的维度为 [nSteps 1] 而不是 [1 nSteps]。由于结果随后用于调用 bsxfun,因此该函数的结果不再是 [size(D,2) nSteps] 的矩阵,而是 [nSteps nSteps] 矩阵,我对此无能为力,而且也很糟糕——在算法的上下文中定义。
TLDR:当索引 R(1:400) 而不是 N x 1 数组时,我可以让 matlab 给我一个 1 x N 数组吗?我可以强制与矩阵索引保持一致吗?
【问题讨论】:
-
我不完全确定我是否理解了你的问题,但是如果你将一个变量初始化为 a(1:10) = one(10,1) 但是你得到一个行向量的问题是那 R(:) 总是给出一个列向量?
-
问题是,在一般情况下,我用一个矩阵索引 R,例如一个 5x400 矩阵,这给了我一个 5x400 矩阵作为回报。 R 是目前类似于 16000000x1 的向量。现在,有时,我索引的矩阵实际上只是一个 1x400 矩阵。这导致我得到一个 400x1 矢量而不是我需要的 1x400。由于我希望在一种情况下处理所有事情,我不能简单地转置该向量,它会影响其他解决方案。也许我应该把它放在首位:x
-
更具体地说明为什么不能简单地转置结果。这似乎是要走的路。
-
结果稍后使用,尺寸很重要,因为我在 bsxfun 中使用它。但是根据我传递的参数,我得到了两种不同的维度,我真的不想要那个。
-
或:1 次,D 是一个偏移量数组,我创建一个矩阵来索引该 R 数组,我得到一个矩阵,它是 D 倍的元素数,无论我的原始索引向量有多长.然而,下一次,D 只是一个数字,或者一个 1x1 向量,现在我得到一个矩阵,它是第一维索引向量的大小,第二维是 1,而不是相反,这就是发生在第一种情况下。这让我很生气。
标签: arrays matlab matrix indexing