This is an automated email from the ASF dual-hosted git repository.
mboehm7 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/main by this push:
new 1690f13 [MINOR] Cleanup set operations (formatting, rm unnecessary
ops)
1690f13 is described below
commit 1690f13861a1c1b7702b6811249bf0ff991fd352
Author: Matthias Boehm <[email protected]>
AuthorDate: Sat Dec 18 21:04:59 2021 +0100
[MINOR] Cleanup set operations (formatting, rm unnecessary ops)
---
scripts/builtin/intersect.dml | 17 ++++++++---------
scripts/builtin/setdiff.dml | 20 ++++++++------------
scripts/builtin/union.dml | 5 ++---
scripts/builtin/unique.dml | 20 ++++++++++----------
4 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/scripts/builtin/intersect.dml b/scripts/builtin/intersect.dml
index bf16c60..747e1bf 100644
--- a/scripts/builtin/intersect.dml
+++ b/scripts/builtin/intersect.dml
@@ -19,7 +19,7 @@
#
#-------------------------------------------------------------
-# Implements set intersection for numeric data
+# Implements set intersection for numeric data
# INPUT PARAMETERS:
@@ -39,14 +39,13 @@
m_intersect = function(Matrix[Double] X, Matrix[Double] Y)
return(Matrix[Double] R)
{
- X = unique(X);
- Y = unique(Y);
+ X = unique(X);
+ Y = unique(Y);
+ combined = rbind(X, Y);
- combined = rbind(X, Y);
+ combined = order(target=combined, by=1, decreasing=FALSE,
index.return=FALSE);
+ temp = combined[1:nrow(combined)-1,] == combined[2:nrow(combined),];
+ mask = rbind(matrix(0,1,1), temp);
- combined = order(target=combined, by=1, decreasing=FALSE,
index.return=FALSE);
- temp = combined[1:nrow(combined)-1,] != combined[2:nrow(combined),];
- mask = rbind(matrix(1, rows = 1, cols = 1), rowSums(temp));
-
- R = removeEmpty(target = combined, margin = "rows", select = !mask);
+ R = removeEmpty(target = combined, margin = "rows", select = mask);
}
diff --git a/scripts/builtin/setdiff.dml b/scripts/builtin/setdiff.dml
index 72b01f8..df74591 100644
--- a/scripts/builtin/setdiff.dml
+++ b/scripts/builtin/setdiff.dml
@@ -36,18 +36,14 @@
#
---------------------------------------------------------------------------------------------
# R Matrix --- vector with all elements that are
present in X but not in Y
-
setdiff = function(Matrix[double] X, Matrix[double] Y)
- return (matrix[double] R)
+ return (matrix[double] R)
{
- common = intersect(X, Y);
- X = unique(X);
- combined = rbind(X, common);
- combined = order(target=combined, by=1, decreasing=FALSE,
index.return=FALSE);
- temp = combined[1:nrow(combined)-1,] != combined[2:nrow(combined),];
- mask1 = rbind(rowSums(temp), matrix(1, rows=1, cols=1));
- mask2 = rbind(matrix(1, rows = 1, cols = 1), rowSums(temp));
-
- mask = mask1 & mask2;
- R = removeEmpty(target = combined, margin = "rows", select = mask);
+ common = intersect(X, Y);
+ X = unique(X);
+ combined = order(target=rbind(X,common), by=1, decreasing=FALSE,
index.return=FALSE);
+ temp = combined[1:nrow(combined)-1,] != combined[2:nrow(combined),];
+ mask = rbind(temp, matrix(1, 1, 1))
+ & rbind(matrix(1, 1, 1), temp);
+ R = removeEmpty(target = combined, margin = "rows", select = mask);
}
diff --git a/scripts/builtin/union.dml b/scripts/builtin/union.dml
index fa3609b..b75e093 100644
--- a/scripts/builtin/union.dml
+++ b/scripts/builtin/union.dml
@@ -38,8 +38,7 @@
union = function(Matrix[Double] X, Matrix[Double] Y)
- return (matrix[double] R)
+ return (matrix[double] R)
{
- combined = rbind(X,Y);
- R = unique(combined);
+ R = unique(rbind(X, Y));
}
diff --git a/scripts/builtin/unique.dml b/scripts/builtin/unique.dml
index 94699be..f4db3bf 100644
--- a/scripts/builtin/unique.dml
+++ b/scripts/builtin/unique.dml
@@ -35,14 +35,14 @@
# R Matrix --- matrix with only unique rows
unique = function(matrix[double] X)
- return (matrix[double] R) {
- if(nrow(X) > 1) {
- X_sorted = order(target=X, by=1, decreasing=FALSE, index.return=FALSE);
- temp = X_sorted[1:nrow(X_sorted)-1,] != X_sorted[2:nrow(X_sorted),];
- mask = rbind(matrix(1, rows = 1, cols = 1), rowSums(temp));
- R = removeEmpty(target = X_sorted, margin = "rows", select = mask);
- }
- else {
- R = X
- }
+ return (matrix[double] R)
+{
+ R = X
+ if(nrow(X) > 1) {
+ # sort-based approach (a generic alternative would be transformencode)
+ X_sorted = order(target=X, by=1, decreasing=FALSE, index.return=FALSE);
+ temp = X_sorted[1:nrow(X_sorted)-1,] != X_sorted[2:nrow(X_sorted),];
+ mask = rbind(matrix(1, 1, 1), temp);
+ R = removeEmpty(target = X_sorted, margin = "rows", select = mask);
+ }
}