我想尝试将以下代码从Matlab实现到Python (我一般对Python不熟悉,但我尝试使用基础知识将其从Matlab翻译过来) % n is random integer from 1 to 10
% first set the random seed (because we want our results to be reproducible;
% the seed sets a starting point in the sequence of random numbers the program
rng(n)
% Generate random columns
a = ran
在主题的末尾有一个新的编辑。我是Python的新手,我想知道如何制作一个简单的三对角矩阵NxN。我有三个向量,将通过一个循环更新。
我在做这样的事情:
注意:我只想知道0和Python参数是如何调整的。嗯,我这里有两个代码,第一个是我用Fortran写的,它很好用。第二个是我试图用Python写的东西。
Fortran:
do i=2,n-1
do j=2,n-1
if (i.eq.j) then
D(i,j+1)=-u_med(i+1)/(delta_r(i)*delta_r(i+1))
t1 =u_med(i+1)/(delta_r(i)*de
我试图执行一个矩阵乘法,它有以下方案:
C = np.dot(np.dot(sparse.csr_matrix(np.double(A).transpose()),sparse.spdiags(B,0,Ngrid,Ngrid)), sparse.csr_matrix(np.double(A)))
因此,我想转置矩阵A,它导致M>>N的N矩阵,并与对角矩阵M矩阵相乘。B是“主要对角线”。得到的矩阵( N )应与矩阵A ( M )相乘,从而得到N矩阵C。
出现的错误如下:
<2000x921600 sparse matrix of type '<class '
我需要在对称矩阵上执行i<j类的求和。这相当于对角排除的矩阵上三角形元素上的和。
给定A一个对称的N x N数组,最简单的解决方案是np.triu(A,1).sum(),但是我想知道是否存在更快、需要更少内存的方法。看起来(A.sum() - np.diag(A).sum())/2在大型数组上速度更快,但是如何避免从np.diag创建甚至是N x 1数组?双重嵌套的for循环不需要额外的内存,但在Python中显然不是这样的。
我有一个15714 x 541的矩阵,这个矩阵似乎不是线性独立的。如何删除不是线性独立的列? 我试着在这篇文章中使用这个解决方案:elimination the linear dependent columns of a non-square matrix in python 但是,它显示: ValueError:项目错误长度为541而不是15714。 Q, R = np.linalg.qr(fixeff.T)
fixeff[np.abs(np.diag(R))>=1e-10] fixeff是我所描述的矩阵。
根据,MATLAB [V,D]=eig(a,b)的等效numpy表达式是V,D = np.linalg.eig(a,b)。
但是当我尝试这个时,我得到了一个错误:
TypeError: eig() takes 1 positional argument but 2 were given
我很困惑,文档中说np.linalg.eig可以有两个论点吗?
奇怪的是,当我查看linalg在的文档时,在“矩阵特征值”的标题下,没有提到linalg.eig有两个参数?
我怎样才能让eig接受两个像MATLAB中的论点?
这在MATLAB中是可行的。
a = diag(ones(3,1));
b = dia
我正在尝试使用numpy包将一些MATLAB代码转换为Python,但不确定eig(A)和diag(A)返回的确切内容,其中A是我的问题标题的矩阵。 例如,我在matlab中有以下代码: [U,autoval] = eig(S);
[d,i] = sort(-diag(autoval));
% where S is a 2 x 2 matrix, [1.1762 1.2076; 1.2076 1.5364] 在numpy中,我可以通过执行以下操作来复制第一行: autoval, U = np.linalg.eig(S) 我得把订单过滤掉。如果我错了,请纠正我,在MATLAB中,第一行eig
我只是在学习python,并想要定义一个函数,它返回一个nxn方阵,主对角线(i=j)、上对角(j=i+1)和下对角线(j=i-1)以及所有其他元素的预定义值等于0。
任何帮助都将不胜感激,
谢谢
import numpy as np
import scipy as sp
n=6
m=np.zeros((n,n))
for i in range(n):
m[i-1,i]=-1
m[i,i]=2
m[i,i-1]=1
m[0,n-1]=0
m[n-1,0]=0
print m
我需要生成一个20x20矩阵,但实际上只知道从c++编写代码:
Do i=-20,20
Do j=-20,20
if i=j, then
A(i,j)=1-(i/sqrt(3))
else
A(i,j)=e^(i*phi*abs(i-j))
显然,草率和写不好,但你得到了我希望的想法!
我将如何在python中输入这个信息?
到目前为止,我发现的唯一方法是使用numpy作为np.array,但是可以想象,我没有使用python在数组中输入~400个术语。