在Java中,从CSV中读取具有命名行和命名列的矩阵
我有一个CSV文件,其中包含一组对象之间的相关系数矩阵(在下面的示例中,它是四个对象u101、u102、u103、u104)。文件使用对象名称作为行名称和列名,如下所示:在Java中,从CSV中读取具有命名行和命名列的矩阵,java,matrix,Java,Matrix,我有一个CSV文件,其中包含一组对象之间的相关系数矩阵(在下面的示例中,它是四个对象u101、u102、u103、u104)。文件使用对象名称作为行名称和列名,如下所示: u101, u102, u103, u104 u101, 1.0, 0.2, 0.1, 0.4 u102, 0.2, 1.0, 0.5, 0.8 u103, 0.1, 0.5, 1.0, 0.9 u104, 0.4, 0.8
u101, u102, u103, u104
u101, 1.0, 0.2, 0.1, 0.4
u102, 0.2, 1.0, 0.5, 0.8
u103, 0.1, 0.5, 1.0, 0.9
u104, 0.4, 0.8, 0.9, 1.0
我现在需要做的是:用Java将CSV文件读入某种矩阵格式,这样我就可以按名称访问相关系数。基本上,我需要实现一个功能:
double getValue(String arg0, String arg1) {
[…]
}
当使用
getValue("u101", "u104")
然后该函数应返回0.4
我如何才能做到这一点?要从文件中读取双精度: 然后将读取的值存储在双精度散列映射中。使用行和列名构造hashmap键。要访问u102、u103处的元件,请执行以下操作:
hashmap.put("u102-u103", 0.5);
x = hashmap.get("u102-u103");
您需要2个贴图和一个二维数组(或arraylist)
- 第一个映射应包含列名称作为键,列位置作为值,即('u101',0),('u102',1)等
- 第二个映射应包含行名称作为键,行位置作为值
- 2d数组应该有数据,即数字本身
return myArray[rowmap.get('rowname')][colmap.get('colname')];
(您可能希望对行/列名称使用
next
,对单元格使用nextDouble
)。将字符串转换为行/列索引-映射
。如果行/coli
的命名总是u(101+i)
,那么您可以简单地substring
和parseInt
。这可能有助于说出您建议的确切内容的HashMap。