在Matlab中,我试图将匿名函数放在数组中:
>> a=[@(k)0.1/(k+1) @(k)0.1/(k+1)^0.501]
??? Error using ==> horzcat
Nonscalar arrays of function handles are not allowed; use cell arrays
instead.
Run Code Online (Sandbox Code Playgroud)
所以我想知道数组和单元数组中允许哪些元素?
例如,我知道在数组中,元素可以是数字或字符串.还有什么?
简而言之:Cell数组是异构容器,规则数组是同构的.这意味着在常规数组中,所有元素都是相同类型,而在单元数组中,它们可以是不同的.你可以阅读更多关于单元阵列在这里.
使用单元格数组时:
身高规则排列时:
关于copy-on-write的更多解释:
将数组传递给函数时,将传递指针/引用.
function foo(x)
disp(x);
end
x= [1 2 3 4 5];
foo(x); %No copy is done here! A pointer is passed.
Run Code Online (Sandbox Code Playgroud)
但是当你改变它(或它的一部分)时,就会创建一个副本.
function foo(x)
x(4) = x(4) + 1;
end
x= [1 2 3 4 5];
foo(x); %x is being copied! At least twice memory amount is needed.
Run Code Online (Sandbox Code Playgroud)
在单元阵列中,仅复制单元格.
function foo(x)
x{4} = x{4} + 1;
end
x= {1 2 3 4 5}; %Only x{4} will be copied
Run Code Online (Sandbox Code Playgroud)
因此,如果您调用一个更改大型数组上的单个元素的函数,则会生成大量副本 - 这会使其变慢.但在单元阵列中,情况并非如此.
| 归档时间: |
|
| 查看次数: |
5350 次 |
| 最近记录: |