Tag: matrix

如何在MATLAB中将不同长度的细胞堆积成matrix?

所以,我有一个不同长度的1xN向量的单元arrays。 我想把它们追加到一个matrix,所以我可以用imagesc显示它们。 显然matrix必须是最大向量的宽度。 我目前的代码如下: tcell = {[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6], [1], []}; lens = cellfun('length', tcell); rmat = NaN(length(tcell), max(lens)); for i = 1:length(tcell) rmat(i, 1:lens(i)) = tcell{i}; end 有没有人知道这种types的问题的vector化解决scheme? 由于MATLAB的JIT,我并不担心这个循环的速度。 我只是想扩大我的知识面,这是我在编程中经常碰到的一个例子。

如何用颜色和值显示matrix?

我想使用MATLAB从双精度matrix创build像这样的图像。 示例图像: http://twitpic.com/2xs943

获得最大总和的子matrix?

input :具有正和负元素的二维arraysNxN – matrix。 输出 :任何大小的子matrix,其总和在所有可能的子matrix中是最大的。 要求 :algorithm复杂度为O(N ^ 3) 历史:在algorithm学家Larry的帮助下,对Kadane的algorithm进行了修改,我设法解决了这个问题的一部分 ,这个问题只是决定了总和 – 在Java下面。 感谢Ernesto设法解决剩下的问题,即确定matrix的边界,即左下angular,右下angular(在Ruby中)。

NumPy Matrix与Array类的乘法有何不同?

numpy文档build议使用数组而不是matrix来处理matrix。 然而,不像八度(直到最近我还在使用),*不执行matrix乘法,您需要使用函数matrixmultipy()。 我觉得这使得代码非常不可读。 有没有人分享我的观点,并find了解决办法?

Android:如何旋转中心点上的位图

我一直在寻找一个解决这个问题的一天,但没有什么帮助,甚至在这里的答案。 文档也没有解释任何东西。 我只是试图在另一个对象的方向旋转。 问题是位图不是围绕固定点旋转,而是绕着位图(0,0)旋转。 这是我遇到的代码: Matrix mtx = new Matrix(); mtx.reset(); mtx.preTranslate(-centerX, -centerY); mtx.setRotate((float)direction, -centerX, -centerY); mtx.postTranslate(pivotX, pivotY); Bitmap rotatedBMP = Bitmap.createBitmap(bitmap, 0, 0, spriteWidth, spriteHeight, mtx, true); this.bitmap = rotatedBMP; 奇怪的是,我怎么改变pre / postTranslate()的值和postTranslate()的float参数setRotation() 。 有人可以帮忙,把我推向正确的方向吗? 🙂

用OpenMP进行Cholesky分解

我有一个项目,我们可以用Cholesky分解来求解大的(超过3000×3000)正定密集matrix的逆。 该项目是在Java中,我们使用的是使用CERN 马驹BLAS库 。 分析代码表明Cholesky分解是瓶颈。 我决定尝试使用OpenMP并行化Cholesky分解,并将其用作Java中的DLL(使用JNA)。 我从Rosetta Code的 C中的Cholesky分解代码开始。 我注意到,除了对angular元素之外,列中的值是独立的。 所以我决定并行计算串行对angular元素和列的其余值。 我也交换了循环的顺序,以便内部循环遍历行和遍历列的外部循环。 串行版本比RosettaCode稍慢, 但并行版本比我的4核(8 HT)系统上的RosettaCode版本快6倍。 在Java中使用DLL可以将我们的结果提高六倍。 这里是代码: double *cholesky(double *A, int n) { double *L = (double*)calloc(n * n, sizeof(double)); if (L == NULL) exit(EXIT_FAILURE); for (int j = 0; j <n; j++) { double s = 0; for (int k = 0; k < […]

matrix乘法:matrix大小差异小,时序差异大

我有一个matrix乘法代码,看起来像这样: for(i = 0; i < dimension; i++) for(j = 0; j < dimension; j++) for(k = 0; k < dimension; k++) C[dimension*i+j] += A[dimension*i+k] * B[dimension*k+j]; 这里,matrix的大小由dimension表示。 现在,如果matrix的大小是2000,运行这段代码需要147秒,而如果matrix的大小是2048,则需要447秒。 所以虽然没有区别 (2048 * 2048 * 2048)/(2000 * 2000 * 2000)= 1.073,时间差为447/147 = 3。有人可以解释为什么会发生这种情况吗? 我预计它会线性扩展,这是不会发生的。 我不是想做出最快的matrix乘法代码,只是想明白为什么会发生。 规格:AMD Opteron双核心节点(2.2GHz),2G RAM,gcc v 4.5.0 程序编译为gcc -O3 simple.c 我已经在Intel的icc编译器上运行了这个,并且看到了类似的结果。 编辑: 正如评论/答案中所build议的那样,我运行了维度= […]

通过空matrix乘法初始化数组更快的方法? (Matlab的)

我偶然发现了奇怪的方式(在我看来)Matlab正在处理空matrix 。 例如,如果两个空matrix相乘,结果是: zeros(3,0)*zeros(0,3) ans = 0 0 0 0 0 0 0 0 0 现在,这已经让我吃惊了,但是,一个快速的search让我看到了上面的链接,并且解释了为什么会发生这种有些扭曲的逻辑。 但是 ,没有任何东西准备好我的观察。 我问自己,这种types的乘法与仅使用zeros(n)函数有多高效,比如初始化的目的呢? 我用timeit来回答这个问题: f=@() zeros(1000) timeit(f) ans = 0.0033 VS: g=@() zeros(1000,0)*zeros(0,1000) timeit(g) ans = 9.2048e-06 两者的结果都是1000×1000的二级零matrix,但是空matrix乘法一个是〜350倍! (类似的结果发生使用tic和toc和一个循环) 这怎么可能? 是timeit或tic,toc虚张声势还是我find了一个更快的方法来初始化matrix? (这是用matlab 2012a完成的,在win7-64机器上,intel-i5 650 3.2Ghz …) 编辑: 在阅读您的反馈之后,我更仔细地研究了这个特性,并在两台不同的计算机(相同的matlab ver 2012a)上testing了一个代码,用于检查运行时间与matrixn的大小。 这是我得到的: 与以前一样生成这个使用的timeit的代码,但是一个循环与tic和toc看起来是一样的。 所以,对于小尺寸, zeros(n)是可比较的。 然而,在n=400左右,空matrix乘法的性能有所提高。 我用来生成该图的代码是: n=unique(round(logspace(0,4,200))); for k=1:length(n) […]

如何实现Matlab的mldivide(又名反斜杠运算符“\”)

我目前正在开发一个小型的面向matrix的math库(我使用Eigen 3进行matrix数据结构和操作),我想实现一些方便的Matlab函数,比如广泛使用的反斜杠运算符(相当于mldivide )来计算线性系统的解(用matrixforms表示)。 关于如何实现这一点,有没有什么好的详细解释? (我已经用经典的SVD分解实现了Moore-Penrose伪逆函数,但是我已经读过A\b并不总是pinv(A)*b ,至lessMatalb并不是这么简单的) 谢谢

你如何将matrix的行连接成一个向量?

对于m-m(方形)数组,如何将所有行连接成大小为m ^ 2的列向量?