我有一些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数据。
关于如何做到这一点有什么帮助或想法吗?
您可以通过将其作为第二个参数传递给mean函数来指定取平均值的维度。然后,您可以使用SQUEEZE函数删除单维,以获得三维矩阵:
meanData = squeeze(mean(data,3));
使用MAX函数查找最大值可以遵循相同的过程,尽管在指定要操作的维度之前必须添加一个空参数[]
:
maxData = squeeze(max(data,[],3));
要分析您的问题,请从错误消息开始:"下标索引必须是实正整数或逻辑整数。"你明白这是什么意思吗?如果没有,是否包含您不确定其含义的单词?你能在文档中详细了解它们吗?你能谷歌一下整个错误信息吗?
这背后的原因是您需要了解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)
做……如果我正确理解了你的问题,这应该完全取代你的循环。
mean(data,3)
和max(data,[],3)