AAAAAAA(1:end,1:end)与AAAAAAA本身并不相同。
>> V = [1 -2 3 -4 5]
V =
1 -2 3 -4 5
>>格式调试
> > V
V =
结构地址= 1cc30d9c0.
m = 1
n = 5.
公关= 60 c004eb8b60
1 -2 3 -4 5
>> B = v
B =
结构地址= 1cc30d9c0.
m = 1
n = 5.
公关= 60 c004eb8b60
1 -2 3 -4 5
因此整个矩阵的直接副本获取相同的数据指针
>> C = V(1:结束)
C =
结构地址= 1 cc30c400
m = 1
n = 5.
pr = 60c004eb8bc0.
1 -2 3 -4 5
但所有元素的副本就可以了
不是
获取相同的数据指针。
在每一个访问值子集的情况下,数据指针必须
不是
是相同的(至少是非稀疏数组)。假设代码可以特殊情况下,索引是全部的和正常的顺序…但是代码并没有这样做。实际上,表示需要普通变量的深度副本的方法是使用1:end,因此在整个数组被访问的情况下重用数据指针的优化可能会导致微妙的问题。
您需要知道的另一个信息是,当您在不使用Total Array的表达式中使用稀疏数组时,请将Matlab
总是
从松弛的非零点上剥离。例如,如果你有
a = spalloc(50,50,75);
A = A + speye(50);
然后A + speye(50)将给出一个临时稀疏数组,有非零剥离,它是剥离的数组,将被分配在A之上。
这类似于你如何定义
b和b将是数据类型复杂的,但只要用它计算任何计算,就像
然后将检查临时值B + 0,并发现具有全零复杂部分,并且复杂部分将被剥离。