public static H2ODrm drmFromMatrix(Matrix m, int minHint, int exactHint) {
// First create an empty (0-filled) frame of the required dimensions
Frame frame = emptyFrame(m.rowSize(), m.columnSize(), minHint, exactHint);
Vec labels = null;
Vec.Writer writers[] = new Vec.Writer[m.columnSize()];
Futures closer = new Futures();
// "open" vectors for writing efficiently in bulk
for (int i = 0; i < writers.length; i++) {
writers[i] = frame.vecs()[i].open();
}
for (int r = 0; r < m.rowSize(); r++) {
for (int c = 0; c < m.columnSize(); c++) {
writers[c].set(r, m.getQuick(r, c));
}
}
for (int c = 0; c < m.columnSize(); c++) {
writers[c].close(closer);
}
// If string labeled matrix, create aux Vec
Map<String,Integer> map = m.getRowLabelBindings();
if (map != null) {
// label vector must be similarly partitioned like the Frame
labels = frame.anyVec().makeZero();
Vec.Writer writer = labels.open();
Map<Integer,String> rmap = reverseMap(map);
for (long r = 0; r < m.rowSize(); r++) {
writer.set(r, rmap.get(r));
}
writer.close(closer);
}
closer.blockForPending();
return new H2ODrm(frame, labels);
}