我有一个类似于:
的数组 0 2 3 4 0 0 7 8 0 10
0 32 44 47 0 0 37 54 0 36
我希望删除所有
0
0
从此得到:
2 3 4 7 8 10
32 44 47 37 54 36
我试过x(x == 0) = []
但我明白了:
x =
2 32 3 44 4 47 7 37 8 54 10 36
如何删除所有零列?
答案 0 :(得分:4)
这是一个可能的解决方案:
x(:,all(x==0))=[]
答案 1 :(得分:3)
您使用x(x == 0) = [];
采用了正确的方法。通过这样做,您将删除仍然可以形成2D矩阵的正确数量的元素,这实际上为您提供了非强零值的向量。您所需要做的就是将reshape
矩阵恢复为原始形式,包含2行:
x(x == 0) = [];
y = reshape(x, 2, [])
y =
2 3 4 7 8 10
32 44 47 37 54 36
另一种方法是使用any
:
y = x(:,any(x,1));
在这种情况下,我们会查找非零的任何列,并使用这些位置索引到x
并提取出相应的列。
结果:
y =
2 3 4 7 8 10
32 44 47 37 54 36
另一种更适合学术目的的方法是使用unique
。假设您的矩阵具有所有正值:
[~,~,id] = unique(x.', 'rows');
y = x(:, id ~= 1)
y =
2 3 4 7 8 10
32 44 47 37 54 36
我们转置x
以便每列成为一行,然后查找所有唯一行。矩阵需要具有所有正值的原因是因为unique
的第三个输出按排序顺序为每个唯一行分配唯一ID。因此,如果我们有所有正值,那么将为所有零的行分配ID为1.使用此数组,我们搜索未赋值为1的ID,并使用这些ID索引到{{1}提取必要的列。
答案 2 :(得分:1)
您也可以使用sum
。
对于列和任何具有零的列的求和,在求和之后也将为零。
sum(x,1)
ans =
0 34 47 51 0 0 44 62 0 46
x(:,sum(x,1)>0)
ans =
2 3 4 7 8 10
32 44 47 37 54 36
答案 3 :(得分:0)
同样通过重塑./configure --enable-tui=yes
make
configure: error: no enhanced curses library found; disable TUI
Makefile:9096: recipe for target 'configure-gdb' failed
如下:
nonzeros(x)