Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何从矩阵中删除重复行_Arrays_Matlab_Matrix_Duplicates - Fatal编程技术网

Arrays 如何从矩阵中删除重复行

Arrays 如何从矩阵中删除重复行,arrays,matlab,matrix,duplicates,Arrays,Matlab,Matrix,Duplicates,我想从矩阵中删除重复的行。我读过,但这不是我想要的 上面的解决方案从矩阵中删除重复的值(单元格)(并返回一个向量),但我需要删除重复的行并返回一个矩阵-相同的矩阵没有重复的行 例如: a = [1,2; 3,4; 5,6; 1,2; 7,8] a = 1 2 3 4 5 6 1 2 7 8 %... ans = 1 2 3 4 5 6 7

我想从矩阵中删除重复的行。我读过,但这不是我想要的

上面的解决方案从矩阵中删除重复的值(单元格)(并返回一个向量),但我需要删除重复的并返回一个矩阵-相同的矩阵没有重复的行

例如:

a = [1,2; 3,4; 5,6; 1,2; 7,8]

a =
     1     2
     3     4
     5     6
     1     2
     7     8

%...

ans =
     1     2
     3     4
     5     6
     7     8
顺序无关紧要。

请参阅

b=unique(A,'rows')返回A的唯一行


这是我的解决办法

package com.test;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class DuplicateInMatrix {
    public static void main(String[] args) {
        Integer[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 1, 2, 3 } };
        Set<Element> set = new HashSet<>();
        for (int i = 0; i < arr.length; i++) {
            set.add(new Element(arr.length, arr[i]));
        }

        buildResultArray(set);
    }

    private static void buildResultArray(Set<Element> set) {
        Integer[][] arr = new Integer[set.size()][];
        Iterator<Element> itr = set.iterator();
        for (int i = 0; i < arr.length && itr.hasNext(); i++) {
            arr[i] = itr.next().row;
        }
        printArrray(arr);
    }

    private static void printArrray(Integer[][] arr) {

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }

    static class Element {
        int n;
        Integer[] row = new Integer[n];

        public Element(int n, Integer[] row) {
            this.n = n;
            this.row = row;
        }

        @Override
        public int hashCode() {
            return Arrays.hashCode(row);
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Element other = (Element) obj;
            return Arrays.deepEquals(this.row, other.row);
        }

        @Override
        public String toString() {
            return Arrays.toString(row);
        }
    }
}
package.com.test;
导入java.util.array;
导入java.util.HashSet;
导入java.util.Iterator;
导入java.util.Set;
公共类复制矩阵{
公共静态void main(字符串[]args){
整数[][]arr={{1,2,3},{4,5,6},{1,2,3};
Set=newhashset();
对于(int i=0;i
如果您还想保持行的原始顺序,请查看以下答案:有人知道用于计算该函数的算法吗?@Will,只需排序即可。