matlab - 简化代码以在matlab中展平数组
问题描述
假设我有一个 1000x2x10x10 矩阵,目前我通过以下代码将它们放入两个单元格数组中,
for i=1:1000
tmp = seqs(i,1,:);
patterns{i} = tmp(:);
tmp = seqs(i,2,:);
labels{i} = tmp(:);
end
patterns{i} = tmp(:)
和的目的labels{i} = tmp(:)
是使矩阵变平。我的问题是,是否可以像这样简化代码patterns{i}=seqs(i,1,:)(:)
?我试过这个,但 Matlab 不允许这样做,这就是我目前必须使用临时变量的原因tmp
。
解决方案
我只会给你3种方法来做到这一点。所有这些都有效。
第一个是我通常使用的一个是在我的计算机上拥有一个名为vec
function out = vec(in)
out = in(:);
end
然后你可以通过
patterns{i} = vec(seqs(i,1,:));
然后你可以调用这个函数,它允许更精简的代码。第二个是评论中提到的reshape
patterns{i}=reshape(seqs(i,1,:),[],1);
我通常不建议对这些类型的问题进行 reshape,因为如果你不小心,它往往会失败。最后是使用挤压和转置。
patterns{i} = squeeze(seqs(i,1,:))';
就个人而言,我更喜欢第一个,因为它使我的代码看起来更好。
推荐阅读
- mysql - MySQL JSON 通配符
- google-app-engine - appengine.googleapis:method() 只需要 1 个参数(给定 2 个)
- android - 如何从使用 getIntent() 接收数据的活动发送数据?
- android - 没有数据返回时如何清除我的 Firebase ListView?
- r - 我的第一个 R Shiny,我如何将 selectinput 与 renderplot(ggplot) 结合起来?
- reactjs - 每次我在我的应用程序中更改页面时,Redux Store 的大小都会增长吗?
- javascript - TypeError: undefined is not an object (评估 '$next[0].offsetWidth')
- c - C 编程错误:结构的未定义符号(Keil 错误 L6218E)
- node.js - 设置音频。当前时间;带有从快递服务器发送的歌曲缓冲区
- pandas - 熊猫中特定列值的日期之间的累积差异