【问题标题】:Matlab: How to get a value from a sparse vector without the sparse data structure?Matlab:如何在没有稀疏数据结构的情况下从稀疏向量中获取值?
【发布时间】:2013-12-10 13:32:14
【问题描述】:

假设

>> hhh=sparse([],[],[],2^40,1);
>> hhh(7)=1;
>> a=hhh(7)

请注意hhh(7)>01>0 在计算时间上有很大的时间差。

在没有稀疏数据结构的情况下,如何只获取变量hhh(7)的值a

示例

输入:用数字和稀疏数据结构赋值,错误。

a =

   (1,1)        1

目标:仅用数字分配

>> a=1

a =

     1

【问题讨论】:

  • a(1) = hhh(7); 怎么样?
  • @Floris 它得到的不是目标稀疏的数据结构,目标是在没有数据结构的情况下得到它的值。

标签: matlab variable-assignment sparse-matrix


【解决方案1】:

使用full 转换您的部分矩阵(矩阵元素),例如要存储在a中的元素,到mat-type:

a = full(hhh(7))

请注意,这也适用于其他选择,例如

a = full(hhh(7:9))

然后输出将是

a =
     1
     0
     0

【讨论】:

  • 矢量大小为2^40,你测试过吗?
  • hhh(7) 的大小不应为 2^40……它是单个元素。我认为这可以工作。比我的解决方案更优雅。
  • 当然,您不应该将 hhh 转换为完整的矩阵.. ;-) 只是元素。顺便说一句:即使 a 在使用之前没有初始化,因为 Floris 的答案需要它,这也可以工作。
  • 现在我不知道问题出在哪里:标准输出只显示一个元素,但是当我执行full(hhh(7)) 时,它需要大量时间。当然,我通过这个小示例快速完成了这项工作,但没有使用稍微不同的示例,我正在尝试重现它,需要一些时间。
  • 我认为处理时间的差异是由于访问了您正在使用的大型结构(稀疏矩阵)。无论您如何转换元素以将其存储在其他位置,这始终是相同的。
【解决方案2】:

当您将表达式分配给变量时,您将“继承”该表达式的所有属性(在可能的情况下)。为了防止这种情况,您需要分配给先前声明的对象的 element。例如:

a = 0;
a(1) = hhh(7);

现在你应该有

>> a
a =
      1

【讨论】:

  • 是否有任何命令可以分析hhh(7),在另一条评论中分享了一个视频,该视频显示了一个具有等效标准输出但占用大量时间和内存的案例。让我们通过A调用hhh(7)所以>> a=0;a(1)=A In an assignment A(I) = B, the number of elements in B and I must be the same.,现在发现错误了吗?尽管 A 只有一个元素,但 a=0;a(1)=A(1)full(A) 花费大量时间并没有错。
猜你喜欢
  • 2012-04-14
  • 2012-01-03
  • 1970-01-01
  • 2017-03-26
  • 2018-04-19
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多