如何将列(左或右)移入矩阵中

111次浏览(最近30天)
NA.
NA. 20月8日
评论道: NA.20月8日
大家好,
我想非圆形地移位我的矩阵,然后将零填充到左侧或右侧(取决于偏移)即,如果矩阵向右移动,则零将填充向左。
到目前为止,我的代码是这样的:
%虚拟数据
数据= rand(5,16);
channelsink = 9;%这个变量可以是>layerIV,
diallayiv = 7;
chdiff = dartleiv - channelsink;
频道= 1:16
如果channelsink> dialliv.
AB(CHDIFF)向左移动列
%和
%设置列由ab(chdiff)转移到零
elseifchannelSink < layerIV
%用chDiff向右移动列
%和
%SET列由CHDIFF转移到零
其他的%如果chDiff = 0,不移动
chDiff = 0;
DISP(“在7频道沉没;不需要重新调整);
结束
结束
先谢谢你。

接受的答案

沃尔特·罗伯森
转变= abs (diff)
%剩下
data = [data(:, shift + 1:结束),零(大小(数据,1),shift)]
%对吧
Data = [zeros(size(Data,1),shift), Data (:, end-shift:shift)];
注意:我们建议不要使用diff()作为变量名,因为它与通用函数冲突 diff () .如果没有别的,它将会使其他阅读您的代码的人感到困惑。
3评论
NA.
NA. 20月8日
谢谢你,沃尔特。我只是做了一个微小的调整,当移位的列差为1。
Data = [zeros(size(Data,1),shift), Data (:, shift-1:end-shift)];
但是,它现在完美地工作。再次感谢!

登录评论。

更多的答案(2)

Abdolkarim穆罕默
编辑:Abdolkarim穆罕默 20月8日
我使用了MATLAB的矢量化能力,所以速度更快,不需要 循环。
数据= rand (5,16);
channelsink = 9;%这个变量可以是>layerIV,
diallayiv = 7;
diff = dialliv - 频道链接;
dataFirstCol = 1;
datalastcol = size(数据,2);
datashiftedfirstcol = 1;
dataShiftedLastCol = size(数据,2);
如果diff < 0
dataFirstCol = dataFirstCol + abs(diff);
datashiftedlastcol = datashiftedlastcol - abs(diff);
elseifdiff > 0
datalastcol = datalastcol - abs(diff);
datashiftedfirstcol = datashiftedfirstcol + abs(diff);
结束
datashifted = zeros(大小(数据));
datashiftted (:, datashifttedfirstcol: datashifttedlastcol) = data (:,dataFirstCol:dataLastCol);
1评论
NA.
NA. 20月8日
感谢。我在for循环中编写代码的原因是我需要在多个数据集(n x 16矩阵)上运行它。但我会努力调整你的做法以满足我的要求。我非常感谢你的帮助。

登录评论。


布鲁诺陈德良
布鲁诺陈德良 20月8日
K > 0右移
k <0左转
a * diag(1,(1,尺寸(a,2)-abs(k)),k)

下载188bet金宝搏


释放

R2019B.

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!