首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在八度范围内创建三维稀疏矩阵

如何在八度范围内创建三维稀疏矩阵
EN

Stack Overflow用户
提问于 2013-12-04 21:17:42
回答 2查看 1K关注 0票数 2

我的问题很难或太简单。因此,我一直在使用稀疏从不同的向量创建一个矩阵(例如这里)

我使用sparse(i,j,s,m,n),其中ij是分配给用地板导出的粒子的,等等(在单元模拟中是粒子)。

这是给1D的。我想要矢量化这个问题的二维,并得到了问题,我不能创建三维稀疏矩阵的八度。

我真的不是八度的专家,我正在寻找一个解决方案,我可以根据i和j值很好地将从s到s的值放入矩阵中。

例如:我在单元格x=2y=2中得到了粒子1,而不是希望从(1,2,2,value)中的粒子1中得到一个具有值的矩阵。有没有一种没有太多if'sfor's的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-05 01:33:31

目前,在八维空间中不可能有N维稀疏矩阵.下面的示例试图将3x9稀疏矩阵重组为3x3x3,您可以看到这一点:

代码语言:javascript
复制
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)访问它。这并不理想,但取决于您如何组织您的数据,您可能使事情或多或少可读性。

票数 1
EN

Stack Overflow用户

发布于 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空间中执行任意操作)创建一个非类的所有函数版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20386163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档