我的问题很难或太简单。因此,我一直在使用稀疏从不同的向量创建一个矩阵(例如这里)
我使用sparse(i,j,s,m,n),其中i和j是分配给用地板导出的粒子的,等等(在单元模拟中是粒子)。
这是给1D的。我想要矢量化这个问题的二维,并得到了问题,我不能创建三维稀疏矩阵的八度。
我真的不是八度的专家,我正在寻找一个解决方案,我可以根据i和j值很好地将从s到s的值放入矩阵中。
例如:我在单元格x=2和y=2中得到了粒子1,而不是希望从(1,2,2,value)中的粒子1中得到一个具有值的矩阵。有没有一种没有太多if's和for's的方法?
发布于 2013-12-05 01:33:31
目前,在八维空间中不可能有N维稀疏矩阵.下面的示例试图将3x9稀疏矩阵重组为3x3x3,您可以看到这一点:
octave> sp = sparse (2, 6, 1, 3, 9)
sp =
Compressed Column Sparse (rows = 3, cols = 9, nnz = 1 [3.7%])
(2, 6) -> 1
octave> reshape (sp, [3 3 3])
warning: reshape: sparse reshape to N-d array smashes dims
ans =
Compressed Column Sparse (rows = 3, cols = 9, nnz = 1 [3.7%])
(2, 6) -> 1你能做的就是有一个稀疏矩阵的单元数组。因此,对于KxMxN上的粒子,您可以拥有data{k} = sparse (M, N, value),并使用data{k}(m,n)访问它。这并不理想,但取决于您如何组织您的数据,您可能使事情或多或少可读性。
发布于 2015-10-10 22:54:35
在八进制和Matlab中,稀疏NDArray都是不可能的。然而,Matlab中有一个实现稀疏NDArray的类,虽然性能可能不是最优的,但它仍然可能比使用单元数组要好得多,因为它在内部将稀疏NDArray表示为一个简单的2D稀疏矩阵:
http://www.mathworks.com/matlabcentral/fileexchange/29832-n-dimensional-sparse-arrays
自从v4以来,Octave现在支持classdef。我还没有试过,但即使还没有成功,它可能很快就会成功。无论如何,您可以在脚本中看到它是如何完成的,并通过应用相同的思想(使用使用自定义函数操作的2D稀疏矩阵在ND空间中执行任意操作)创建一个非类的所有函数版本。
https://stackoverflow.com/questions/20386163
复制相似问题