Matlab从二维数组中选择元素

时间:2018-07-16 05:03:27

标签: matlab

我有一个601 X 1600 matlab阵列(时间x试用版)。我想通过丢弃超出标准值100的试验来创建单独的数组。即,结果数组的大小应为601 x n。有人可以帮我吗?

谢谢, 彼得

1 个答案:

答案 0 :(得分:-1)

您在这里有两个选择。一种是使用bzier指出的find

我在这里建议的另一个基于logical operation,它更快。

m_transposed = m'; % m is your 601*1600 matrix
mask = m_transposed<=100; % a logical matrix 
m = m_transposed(mask); % this creates a vector, the values of which are <= 100
m = reshape(m, [], 601)'; % reshape the vector into a 601*n matrix.

您还可以将四行合并为两行:

m_transposed = m';
m = reshape(m_transposed(m_transposed<=100), [], 601)';

请注意,如果逐行丢弃的元素数量不同,则上述代码将不起作用,因为某些行剩余的元素数量更少,并且您无法形成601 * n矩阵。在这种情况下,您可以选择用零或nan填充矩阵中的空白空间:

mask = m>100;
m(mask) = nan; % replace values > 100 with nans.
m(:,sum(mask)==size(m,1)) = []; % delete columns whose values are all nans.

更新

不确定我的答案为什么会被否决。也许我没有提到find方法?只需替换

mask = m_transposed<=100mask = find(m_transposed<=100)

mask = m>100mask = find(m>100)

相关问题