一位朋友需要一种算法让他循环遍历NxM矩阵的元素(N和M是奇数).我提出了一个解决方案,但我想知道我的同事是否可以提出更好的解决方案.
我发布我的解决方案作为这个问题的答案.
示例输出:
对于3x3矩阵,输出应为:
(0,0)(1,0)(1,1)(0,1)(-1,1)(-1,0)( - 1,-1)(0,-1)(1,-1) )

此外,该算法应支持非平方矩阵,因此例如对于5x3矩阵,输出应为:
(0,0)(1,0)(1,1)(0,1)(-1,1)(-1,0)( - 1,-1)(0,-1)(1,-1) )(2,-1)(2,0)(2,1)(-2,1)(-2,0)( - 2,-1)

我们正在计算运行时受矩阵运算约束的东西.(如果感兴趣,请参阅下面的一些细节.)这次经历提出了以下问题
民间有没有使用Java库的矩阵数学性能经验(例如,乘法,逆等)?例如:
我搜查了一下,一无所获.
我们的速度比较详情:
我们使用的是英特尔FORTRAN(ifort(IFORT)10.1 20070913).我们使用Apache commons math 1.2矩阵运算在Java(1.6)中重新实现了它,并且它同意所有的精度数字.(我们有理由在Java中想要它.)(Java双打,Fortran真*8).Fortran:6分钟,Java 33分钟,同样的机器.jvisualm profiling显示了在RealMatrixImpl中花费了大量时间.{getEntry,isValidCoordinate}(在未发布的Apache commons math 2.0中似乎已经消失了,但2.0并不快).Fortran正在使用Atlas BLAS例程(dpotrf等).
显然这可能取决于我们在每种语言中的代码,但我们相信大部分时间都在等效的矩阵运算中.
在其他几个不涉及库的计算中,Java并没有慢得多,有时甚至更快.
我正在使用numpy.我有一个包含1列和N行的矩阵,我想从N个元素中获取一个数组.
例如,如果我有M = matrix([[1], [2], [3], [4]]),我想得到A = array([1,2,3,4]).
为了实现它,我使用A = np.array(M.T)[0].有谁知道更优雅的方式来获得相同的结果?
谢谢!
我有一个数组数组,如:
[
[1,2,3],
[1,2,3],
[1,2,3],
]
Run Code Online (Sandbox Code Playgroud)
我想转置它以获得以下数组:
[
[1,1,1],
[2,2,2],
[3,3,3],
]
Run Code Online (Sandbox Code Playgroud)
使用循环以编程方式执行此操作并不困难:
function transposeArray(array, arrayLength){
var newArray = [];
for(var i = 0; i < array.length; i++){
newArray.push([]);
};
for(var i = 0; i < array.length; i++){
for(var j = 0; j < arrayLength; j++){
newArray[j].push(array[i][j]);
};
};
return newArray;
}
Run Code Online (Sandbox Code Playgroud)
然而,这看起来很笨重,我觉得应该有一种更简单的方法.在那儿?
我遇到了试图在R中使用大对象的问题.例如:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there …Run Code Online (Sandbox Code Playgroud) numpy文档建议使用数组而不是矩阵来处理矩阵.但是,与octave(我直到最近使用)不同,*不执行矩阵乘法,你需要使用函数matrixmultipy().我觉得这使得代码非常难以理解.
有人分享我的观点,并找到了解决方案吗?
在R中有一个矩阵:
one two three four
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 11 18
[4,] 4 9 11 19
[5,] 5 10 15 20
Run Code Online (Sandbox Code Playgroud)
我想提取其行有第三列= 11的子矩阵.这是:
one two three four
[1,] 1 6 11 16
[3,] 3 8 11 18
[4,] 4 9 11 19
Run Code Online (Sandbox Code Playgroud)
我想在没有循环的情况下这样做.我是R的新手,所以这可能非常明显,但文档往往有些简洁.
对于python中的numpy矩阵
from numpy import matrix
A = matrix([[1,2],[3,4]])
Run Code Online (Sandbox Code Playgroud)
如何找到此矩阵的行(或列)的长度?同样,我怎么知道行数或列数?
到目前为止,我发现的唯一解决方案是:
len(A)
len(A[:,1])
len(A[1,:])
Run Code Online (Sandbox Code Playgroud)
它分别返回2,2和1.从此我收集到的len()将返回行数,因此我总是可以使用转置,len(A.T)列数.然而,这感觉不令人满意和任意,因为在阅读该行时len(A),这应该返回行数并不是很明显.它实际上与len([1,2])2D python数组的工作方式不同,因为它会返回2.
那么,有没有更直观的方法来找到矩阵的大小,或者这是我最好的?
我有一个data.frame看起来像这样的.
x a 1
x b 2
x c 3
y a 3
y b 3
y c 2
Run Code Online (Sandbox Code Playgroud)
我想以矩阵形式这样做,所以我可以将它送到热图以制作情节.结果应该类似于:
a b c
x 1 2 3
y 3 3 2
Run Code Online (Sandbox Code Playgroud)
我已尝试cast从reshape包中尝试编写手动函数来执行此操作,但我似乎无法正确执行此操作.
给定以下矩阵假设我想在第二列中找到最大值:
mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3)
mat
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 7 8 9
[3,] 4 5 6
Run Code Online (Sandbox Code Playgroud)
我知道max(mat[,2])会返回8.如何返回行索引,在这种情况下第二行?