我想计算一个扩散核,这涉及到取exp(b*A),其中A是一个大矩阵。为了处理b的值,我想对角化A(以便exp(A)运行得更快)。
我的矩阵大约是25k x 25k,但是非常稀疏-只有大约60k的值是非零值。Matlab的"eigs“函数内存不足,octave的"eig”和R的“eigen”也是如此。有没有工具可以找到大型稀疏矩阵的分解?
不知道这是否相关,但A是一个邻接矩阵,所以它是对称的,并且是满秩的。
我只想知道python中这个特殊的for循环是否有Octave/Matlab等价的语法:
for (i,j) in [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7)]:
a[i,j] = 1
我需要它来简化我的图像处理任务,我可以轻松地构造图像矩阵,而不必为图像矩阵的几乎每个元素输入每个像素值。因此,如果在Octave/Matlab中有任何其他实现上述功能的方法,请让我知道。
谢谢。
我有一个非常大的稀疏矩阵,大小为180 3M(文本,30k * 3M),其中只包含条目,不包含其他数据。我必须在上面做矩阵乘法,求逆和一些类似的线性代数运算。我试着用倍频程和简单的单线程C代码进行乘法,但是我40 my的系统RAM很快就用完了,然后我发现程序开始颠簸了。我还有没有别的选择?我不熟悉MathLab或任何其他可以帮助我做到这一点的矩阵操作库。
当我运行10行3 M的两个矩阵的简单矩阵乘法及其转置时,它给出了以下错误:
memory exhausted or requested size too large for range of Octave's index ty
考虑一个大小为d1 x d2 x d3的3D矩阵t。是否有一种简单的方法来制作大小为d1d2 x d3的矩阵(2D数组)?
因此,简单的实现/伪代码应该是这样的:
T % d1 x d2 x d3
M % d1d2 x d3
for i=1:d3
t_slice = t(:,:,i);
m = reshape(t_slice, [d1d2, 1]); %columns of t_slice are the vector
M(:,i) = m;
end
但似乎有些东西应该已经实现了,或者matlab中的某个库已经这样做了。手工操作看起来有点低效,我怀疑有一些巧妙的MATL
在MatLab中,您可以很容易地声明符号:
syms a,b
mat = [a,b]
但是,当我试图在Octave中复制这个错误的时候,我会发现一个错误。这是我使用的代码:
> symbols
> a = sym("a")
a =
a
> b = sym("b")
b =
b
> mat = [a,b]
error: octave_base_value::resize (): wrong type argument `ex'
error: octave_base_value::resize (): wrong type arg
我正在学习一门机器学习课程,并且我正在使用Octave (MatLab应该是相同的)做下面的练习。
该练习与计算梯度下降algoritm的成本函数有关。
在课程幻灯片中,我知道这是我必须使用Octave实现的成本函数:
这是课程幻灯片中的公式:
所以J是由THETA矩阵表示的一些THETA变量的函数(在以前的第二个方程中)。
这是用于J(THETA)计算的正确的MatLab\Octave实现:
function J = computeCost(X, y, theta)
%COMPUTECOST Compute cost for linear regression
% J = CO
我有矩阵A大小M x N,其中一般元素是a_{i,j}。我想要矩阵B size M x N,其中通用元素b_{i,j}生成这样的a_{i,j}除以同一列的其他元素之和(j-th列)。
例如,如果A大小为3 x 2,则为b_{2,1}=a_{2,1}/(a_{1,1}+a_{1,3})。
如果是A=randn(M,N),有人能帮我用Matlab写这个吗?
Matlab中的矢量化代码运行速度比for循环快得多(有关Octave中的具体结果,请参阅 )
话虽如此,有没有一种方法可以将Matlab或Octave中显示的代码向量化?
x = -2:0.01:2;
y = -2:0.01:2;
[xx,yy] = meshgrid(x,y);
z = sin(xx.^2-yy.^2);