如何从一个数组删除零?

4.391视图(30天)
猫王萨默斯
猫王萨默斯 2017年3月20日
评论道: Trevon McHansen2021年12月23日
我想从一个数组删除0。数组的每一行一个零。例如:
一个= [1 4 0 3;0 1 5 5;1 0 8 1;5 4 4 0;5 0 1 2]
应该变成
(1 = 4 3;1 5 5;1 8 1;5 4 4;1 5 2]
我已经尝试使用命令
(= = 0)= [];
然而,这2000×50数组变成2000 x49 x98000数组而不是一个数组就像我想要它。什么好主意吗?

接受的答案

Beder
Beder 2017年3月20日
编辑:MathWorks支金宝app持团队 2018年11月28日
去掉一个零矩阵的每一行,重建的新矩阵非零项,试试下面的代码:
一个= [1 4 0 3;0 1 5 5;1 0 8 1;5 4 4 0;5 0 1 2]
v = 0(的);
newmat =重塑(v, 3、5) '
3评论
Trevon McHansen
Trevon McHansen 2021年12月23日
@eloy加西亚贝 如果你试一试在MATLAB中您将看到,适当大小的输出需要一点思考。
调用非零矩阵 一个 将返回一个向量的元素。这是因为MATLAB并不试图“自然”调整输出任何其他方式。(因为MATLAB实际上并不知道有多少零将省略或他们的相互关系)。
因为我们知道有确切1 ' 0 '每一行的元素,我们知道输出矩阵大小将输入矩阵的大小,不过少了一个列。所以规模将从5,4到5 3。
当你从非零向量,的值被认为是column-by-column。但是我们一点考虑行操作调整大小。
通过更换一个非零的电话,你告诉它治疗行和列,反之亦然,这使得行为“一点就像行操作操作”。
一点当你行操作输出,可以重塑一个矩阵。重塑也列操作,它将向量v,第一列赋值。所以为了解决这个问题,Beder首先直接改造成3,5,然后整个矩阵转置。
获得更多的视觉呈现。尽量不使用“得到正确的输出。

登录置评。

答案(1)

剑齐米。
剑齐米。 2018年12月12日
如果我们不知道有多少元素后提交删除零元素。
(是一个很大的矩阵)=
v = 0(的);
newmat =重塑(v, ?, ?)
什么好主意吗?
6个评论
帕特里克·奔驰
帕特里克·奔驰 2021年10月6日
Das scheint zumindest肖恩einmal毛皮死Reihen祖funktionieren welche努尔0 Elemente enthalten。
贝窝gemischten Reihen funktioniert es河口offensichtlich走错,da努尔死Reihen冯behalten了welche 0 enthalten。
我要是窝代码所以我汪汪汪矩阵anwende,哪里可以买杯0 x 20双als Ergebnis。
我要是wusste器皿es einfacher,是不是有0 pro Reihe der矩阵enthalten信德吗?
编辑:
欧什es sicherlich要是不das schnellste奥得河eleganteste Ergebnis坚持,有我es麻省理工学院geschachtelten Schleifen geschafft。
Elementset_Nodes x = 2276221双
Node_Coord x = 77651双
r = 1;
[LIA, LOCB] = ismember (Elementset_Nodes(:, 2:结束),Node_Coord (: 1));
i = 1:长度(LOCB)
X = 0;
X =找到(LOCB(我,:));
如果和~ (X) = 0
j = 1:长度(X)
new_Mat (r, 1) = Elementset_Nodes(我,1);
new_Mat (r, j + 1) = LOCB (i (X (j));
结束
其他的
:new_Mat (r) = 0;
:new_Mat (r) = [];
结束
[r、c] =找到(new_Mat);
r = max (r) + 1;
结束
Elementset_Nodes = horzcat (Elementset_Nodes (: 1), new_Mat);

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!