你不把报错的信息贴出来,谁知道出了什么问题呢?我运行了一个类似的,却没有报错(能不用for循环就不用吧)
>> data = rand(10,10,3);
>> newdata = zeros(size(data));
>> x = 1:10; y = 1:10;
>> x1 = mode(x+y,10);
>> y1 = mode(x+2*y,10);
>> newdata(x1,y1,:) = data(x,y,:);
>> x1
x1 =
2 4 6 8 10 12 14 16 18 20
>> y1
y1 =
3 6 9 12 15 18 21 24 27 30
还有你是不是用错函数了?mode是表示求出现频率最高的元素,你想用的mod(同余)吧?
然而
>> data = rand(10,10,3);
>> newdata = zeros(size(data));
>> x = 1:10; y = 1:10;
>> x1 = mod(x+y,10);
>> y1 = mod(x+2*y,10);
>> newdata(x1,y1,:) = data(x,y,:);
??? Subscript indices must either be real positive integers or logicals.
>> x1
x1 =
2 4 6 8 0 2 4 6 8 0
>> y1
y1 =
3 6 9 2 5 8 1 4 7 0
将newdata(x1,y1,:) = data(x,y,:);改成,
>> x1(x1==0) = 10;y1(y1==0) = 10;
>> newdata(x1,y1,:) = data(x,y,:);
没报错了,这是因为很多10的倍数同余后变成了0,故找出来赋值为10.
any question?