Octave:表示标准基向量的矩阵
假设我有一个矩阵,其中每一行都是一个标准基向量,即每一行恰好包含一个 1,其他列为 0。
是否有一种方便的方法来创建这样的矩阵(即给定一个位置向量,其中每行)?
另外,有没有一种方法可以表示这样一个矩阵,以便可以在八度音程中更有效地进行乘法?
Suppose I have a matrix such that each row is a standard basis vector, i.e. each row contains exactly one 1, the other columns being 0.
Is there a convenient way to create such a matrix (i.e. given a vector of positions of where the ones are in each row)?
Also, is there a way I should represent such a matrix so that multiplications with it can be done more efficiently in octave?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
假设您想要一个 3x3 矩阵,其中的元素分别位于第 3、1 和 2 列中:
将为您提供一个包含 9 个元素的矩阵,其中大部分为零,元素位于所需的位置。您可以使用稀疏表示来节省内存:
sparse_x =稀疏(x);
。但在我的机器上进行的以下测试表明自然形式的倍增速度更快:这是 Core i7 上的 Octave 3.4,YMMV。
看看
whos
,Octave 似乎正在用x
做一些聪明的事情:如果它知道
x
是特殊的,也许它已经在利用加速乘法。Suppose you want a 3x3 matrix with the ones in columns 3, 1, and 2 respectively:
will give you a matrix with 9 elements, most zero, with the ones in the desired places. You can save memory by using a sparse representation:
sparse_x = sparse(x);
. But the following test on my machine implies that the natural form multiplies faster:This was Octave 3.4 on a Core i7, YMMV.
Looking at
whos
it appears that Octave is doing something clever withx
:If it knows
x
is special, maybe it's already taking advantage of speedups in the multiplication.