gpt4 book ai didi

matlab - 从张量的每个正面切片中提取对角线元素

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:44 26 4
gpt4 key购买 nike

我有一个 p×p×n 张量。我想为每个 p-by-p 切片提取对角线元素。有没有人知道如何在不循环的情况下做到这一点?

谢谢。

最佳答案

Behold永远强大的 bsxfun 对于 vectorizing MATLAB problems使用 MATLAB's linear indexing 非常有效地完成这项任务-

diags = A(bsxfun(@plus,[1:p+1:p*p]',[0:n-1]*p*p))

使用 4 x 4 x 3 大小的输入数组运行示例 -

A(:,:,1) =
0.7094 0.6551 0.9597 0.7513
0.7547 0.1626 0.3404 0.2551
0.2760 0.1190 0.5853 0.5060
0.6797 0.4984 0.2238 0.6991
A(:,:,2) =
0.8909 0.1493 0.8143 0.1966
0.9593 0.2575 0.2435 0.2511
0.5472 0.8407 0.9293 0.6160
0.1386 0.2543 0.3500 0.4733
A(:,:,3) =
0.3517 0.9172 0.3804 0.5308
0.8308 0.2858 0.5678 0.7792
0.5853 0.7572 0.0759 0.9340
0.5497 0.7537 0.0540 0.1299
diags =
0.7094 0.8909 0.3517
0.1626 0.2575 0.2858
0.5853 0.9293 0.0759
0.6991 0.4733 0.1299

基准测试

这里有一些运行时测试将这种基于 bsxfun 的方法与 repmat + eye based approach 进行了比较对于大数据量 -

***** Datasize: 500 x 500 x 500 *****
----------------------- With BSXFUN
Elapsed time is 0.008383 seconds.
----------------------- With REPMAT + EYE
Elapsed time is 0.163341 seconds.

***** Datasize: 800 x 800 x 500 *****
----------------------- With BSXFUN
Elapsed time is 0.012977 seconds.
----------------------- With REPMAT + EYE
Elapsed time is 0.402111 seconds.

***** Datasize: 1000 x 1000 x 500 *****
----------------------- With BSXFUN
Elapsed time is 0.017058 seconds.
----------------------- With REPMAT + EYE
Elapsed time is 0.690199 seconds.

关于matlab - 从张量的每个正面切片中提取对角线元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28402197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com