java - 如何基于 Java 中的稀疏列矩阵参数创建二维数组?
问题描述
我是 Java 新手。我想创建一个基于压缩稀疏列矩阵参数的二维 java 数组。例如,我可以在 python 中使用以下代码创建一个二维数组:
from scipy.sparse import csc_matrix
indices = [0, 2, 2, 0, 1, 2]
indptr = [0,2,3,6]
data = [1, 2, 3, 4, 5, 6]
shape = [3,3]
sp_mat = csc_matrix((data, indices, indptr), shape=shape).todense()
print(sp_mat)
[[1 0 4]
[0 0 5]
[2 3 6]]
但是我不知道如何在Java中实现它。
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int[] indices = new int[]{0, 2, 2, 0, 1, 2};
int[] indptr = new int[]{0, 2, 3, 6};
int[] data = new int[]{1, 2, 3, 4, 5, 6};
int[] shape = new int[]{3, 3};
// some code to create 2D arrays
}
}
我将拥有indices
,和1d 数组,如上面的代码indptr
。我希望能够创建以下二维数组:data
shape
int[][] sp_mat = new int[][]{{1, 0, 4}, {0, 0, 5}, {2, 3, 6}};
解决方案
我怀疑是否有任何标准方法可以做到这一点。如果您想使用专用类,那么一些具有稀疏矩阵的数学库可能会提供这样的构造函数。如果您只想要二维数组,那么您可以轻松地自己实现这样的代码。如果您需要这样的签名,那么这里是简单的方法:
private static int[][] to2dArray(int[] row, int[] col, int[] data, int[] shape) {
//check here row.length == col.length == data.length and shape.length == 2
int[][] mat = new int[shape[0]][shape[1]];
var length = row.length;
for (int i = 0; i < length; i++) {
mat[row[i]][col[i]] = data[i];
}
return mat;
}
后期编辑后,这里是 CSC(压缩稀疏列)版本:
private static int[][] to2dArray(
int[] indices, int[] indicesPtr, int[] data, int[] shape) {
int[][] mat = new int[shape[0]][shape[1]];
for (int column = 0; column < shape[1]; column++) {
var from = indicesPtr[column];
var to = indicesPtr[column + 1];
for (int index = from; index < to; index++) {
mat[indices[index]][column] = data[index];
}
}
return mat;
}
推荐阅读
- go - ElasticSearch 5.6 > 7.x 升级,是否有 auto_generate_phrase_query 等效项?
- javascript - 通过浏览器插件访问任何站点的服务工作者上下文/世界/执行环境以代理 self.registration.showNotification?
- mainframe - Apache commons net FTPClient storeFile() 创建带有用户名前缀的文件
- java - 重定向到带有连字符的 URL 不起作用
- docker - Docker mkdir 没有创建目录
- node.js - 在需要冲突版本的项目中,如何正确解决 NPM 依赖关系?
- python - 如何获取正在运行的 Blender 脚本路径
- ios - 在 react-native-matomo 中找不到 React/RCTAssert.h 文件
- node.js - 如何使 req.body.password 不等于未定义?
- python-3.x - 使用自定义聚合调用 Dask groupby 时出错