总结两个向量

Posted

技术标签:

【中文标题】总结两个向量【英文标题】:Sum up two vectors 【发布时间】:2015-08-23 10:02:47 【问题描述】:

我可以知道如何在 java 中对两个向量求和吗?

public void CosineSimilarity(ArrayList<Integer> h,String a, Object[] array) throws Exception  
           Vector value  = new Vector();
           double cos_sim=(cosine_similarity(vec1,vec2))*60/100;
           System.out.println(cos_sim); //I get [0.333] and [0.358]
           value.add(cos_sim);   
           CompareType(value,a,array);

这里是 CompareType 函数

 public void CompareType(Vector value,String a,Object[] array ) throws Exception 
                // TODO Auto-generated method stub
                String k;
                double c = 0;
                String sql="Select Type from menu ";
                DatabaseConnection db = new DatabaseConnection();
                Connection  conn =db.getConnection();
                PreparedStatement  ps = conn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();
                Vector value1 = new Vector();
                while (rs.next()) 
                
                k=rs.getString("Type");
                if(a.equals(k))
                
                    c=10.0/100;
                    value1.add(c);
                    
                else
                
                    c=0;
                    value1.add(c);  
                
                 
                System.out.println(value1); // I get [0.0] and [0.1]
                Sum(value,value1);

                ps.close();
                rs.close();
                conn.close();

            

我应该在下面的函数中写什么,以便可以将两个值向量相加并返回两个总值?

private void Sum(Vector value, Vector value1) 

        // TODO Auto-generated method stub

    

【问题讨论】:

如果您使用java.util.Vector,请注意它是一个命名错误的可扩展列表类。它不是表示数学向量的理想对象。 【参考方案1】:

使用 Java8 流 API 很容易(此示例代码将 6.0 输出为 1.0+2.0+3.0 的总和:

/** setup test data and call @link #sum(Vector) */
public static void main(String[] args) 
    Vector a = new Vector();
    Vector b = new Vector();

    a.add(1.0);
    a.add(2.0);
    b.add(3.0);

    System.out.println(sum(a, b));


/** Sum up all values of two vectors */
private static double sum(Vector value, Vector value1) 
    return sum(value) + sum(value1);


/** Sum up all values of one vector */
private static double sum(Vector value) 
    return

            // turn your vector into a stream
            value.stream()

            // make the stream of objects to a double stream (using generics would
            // make this easier)
            .mapToDouble(x -> (double) x)

            // use super fast internal sum method of java
            .sum();

关于如何让您的代码变得更好的一些想法:

使用泛型。它们将帮助您避免强制转换,并且编译器会自动向您显示代码中的错误。 有意义地命名您的变量和方法。使用sumAsumB代替sumsum1等。 使用 Java 编码约定(例如使用小写的方法名称)。这将帮助其他 Java 开发人员更快地理解您的代码。 使用接口和超类作为变量类型、返回类型和参数类型。这使您的代码具有更好的可重用性。在您的示例中使用CollectionList 接口。 使用 java.util.ArrayList 支持 Vector。 (来自官方 javadoc:“如果不需要线程安全实现,建议使用 ArrayList 代替 Vector。”)

【讨论】:

但是我的 sql 中有 100 个案例..这种方法可能无济于事 @seng 为什么这种方法没有帮助?您有性能问题吗?还是您必须将 100 个向量相加而不是两个?

以上是关于总结两个向量的主要内容,如果未能解决你的问题,请参考以下文章

机器学习基本概念总结

关于向量点积和叉积的回顾和总结

向量总结

数学空间向量中怎样证明四点共面

超平面多维近似向量查找工具annoy使用总结

两个向量相加怎么算