作者shadow5402 (shadow5402)
看板MATLAB
标题[问题] 提取矩阵中大於0的数值到另一个矩阵
时间Mon May 4 14:57:51 2015
假设我目前有一个varible x
x =
0 0 1 2
0 3 2 0
1 3 0 0
2 0 0 0
我希望将其中不等於0的部分移动到另外一varible y
变成
y =
1 3 1 2
2 3 2 0
目前我的写法是
for k = 1:4
for a = 1:2
if x(k,1) > 0
y(a,1) = x(k,1);
end
if x(k,2) > 0
y(a,2) = x(k,2);
end
if x(k,3) > 0
y(a,3) = x(k,3);
end
if x(k,4) > 0
y(a,4) = x(k,4);
end
end
end
但结果却是
y =
2 3 2 2
2 3 2 2
请问我是哪里写错了?又该怎麽改呢?
谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.183.173
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1430722675.A.5A4.html
1F:推 JamesChen: 固定位置或是非0的数量是固定的? 05/04 15:09
真正打算用的资料中,非0的数量是非固定的
因为是打算整理实验得到的数据,所以每个数据的位置也不会相同
2F:→ jatj: 不是很了解你的y是怎麽塞的 x只有七个非0y怎麽有8个 05/04 15:26
看起来得到的结果,是把x的每一列中最後一个非0丢到y的对应列中
对不起,我看了一下,原来你指的是我想要的结果。
那个部分的确是我打错了,谢谢!(已经修正了)
※ 编辑: shadow5402 (140.116.183.173), 05/04/2015 15:29:31
※ 编辑: shadow5402 (140.116.183.173), 05/04/2015 15:30:33
※ 编辑: shadow5402 (140.116.183.173), 05/04/2015 15:34:58
※ 编辑: shadow5402 (140.116.183.173), 05/04/2015 15:35:36
3F:→ celestialgod: arrayfun(@(y) y{:}(y{:}~=0), mat2cell(x, ones(1, 05/04 16:22
4F:→ celestialgod: 4), 4), 'UniformOutput', false) 05/04 16:23
5F:→ celestialgod: 如果等长可以在用cell2mat转成矩阵 05/04 16:23
6F:→ celestialgod: 或是利用cellfun补0补到等长 05/04 16:24
7F:→ celestialgod: 回圈则我用回文好了QQ 05/04 16:28
好,十分感谢你的帮忙QQ
※ 编辑: shadow5402 (140.116.183.173), 05/04/2015 16:33:08
8F:推 profyang: 你的y明明就有0 这不是自打嘴巴吗?= = 05/05 09:53
9F:→ celestialgod: 原po应该只是想要矩阵的样子也不知道可以用NA去补 05/05 11:45