1

我有一些 4D 图像数据,384×276×20×5,其中data(X,Y,T,V), X = x location, Y = y location, T = time, V = vessel location.

我想有一个随时间变化的平均值和随时间变化的最大值,以获得我的信号模式,从而设置我的阈值。我在循环中进行,所以我可以说,例如data(1,1,:,1),随着时间的推移该点的平均值。

我试过了mean(data(X,Y,:,V))mean(squeeze(data(X,Y,:,V)))但它给了我错误“下标索引必须是真正的正整数或逻辑。”

我到处搜索,但平均值的示例仅适用于 2D 和 1D。我认为,如果我想随时间获得数据的平均值/最大值,那么数据data(X,Y,:,V)就是现在的 3D 数据。

关于如何做到这一点的任何帮助或想法?

4

3 回答 3

3

您可以通过将其作为第二个参数传递给MEAN函数来指定取平均值的维度。然后,您可以使用SQUEEZE函数删除单一维度以获得 3-D 矩阵:

meanData = squeeze(mean(data,3));

可以按照相同的过程使用MAX[]函数找到最大值,但在指定要操作的维度之前,您必须添加一个空参数:

maxData = squeeze(max(data,[],3));
于 2011-07-22T13:41:23.270 回答
1

要分析您的问题,请从错误消息开始:“下标索引必须是真正的正整数或逻辑。” 你明白这意味着什么吗?如果不是,它是否包含您不确定它们是什么意思的词?您可以在文档中阅读有关它们的信息吗?你能谷歌整个错误信息吗?

这背后的原因是您需要了解 MATLAB 如何访问 384×276×20×5 数组的元素;您的问题与采取手段或最大值无关,因此搜索这些术语没有帮助。

当您键入

data(X,Y,T,V)

那么 X,Y,T,V 需要是整数(或整数向量),即 X 必须在 1:384 的范围内,依此类推。例如,

mean(data(1,1,:,1))

将为您提供前 X、Y 和 V 点的时间平均值。

也就是说,你是说你使用循环......看看什么

mean(data,3)

max(data,[],3)

做...如果我正确理解您的问题,这应该完全取代您的循环。

于 2011-07-22T13:40:32.813 回答
1

mean(data,3)max(data,[],3)

于 2011-07-22T13:45:08.887 回答