sas转java(1)截取子矩阵、unique、获取矩阵的行列数、创建特殊矩阵、求矩阵中的最大最小值、横纵合并矩阵、将矩阵转换为0,1形式、转置求逆
2014-12-03 14:15
363 查看
[b]这里java的矩阵运算用的是ujmp包[/b]
sas和java的矩阵名一律以[b]m[/b](Means for matrix)表示,
向量一律用[b]v[/b](vector)表示
数值用num表示
[b]结果[/b]用[b]res[/b](result)表示
[b]1:sas创建行向量,列向量和矩阵[/b]
v = {1 2 3 4};行向量
v = {1,2,3,4};列向量
v = {1 2,3 4};矩阵
[b]选择一列或一行/多行或多列[/b]
单行列的情况
sas列 res = m[,j]; java列 res = m.selectColumns(Calculation.Ret.NEW, j);
sas行 res = m[i,]; java行 res = m.selectColumns(Calculation.Ret.NEW, i);
多行列的情况,单这里是针对要么行全部/列全部
sas res = m[,mj]; mj是行向量,这样就可以选取多列多行情况一样。
java res=m.selectColumns(Calculation.Ret.NEW, mj.toLongArray()[0]); 将mj转化为数组的行书进行处理。
截取子矩阵,行列都可以设置
lx->left x ly->left y
rx->right x ry->right y
sas: m[lx:rx,ly:ry];
java: m.subMatrix(Calculation.Ret.NEW, lx, ly, rx, ry)
[b]2:选择矩阵中的distinct值[/b]
sas: res=unique(m);结果以行向量表示
java: res=m.unique(Calculation.Ret.NEW);结果一列向量表示
[b]3:获取矩阵的行数与列数[/b]
sas: res = nrow(m) java:res = m.getRowCount();
sas: res = ncol(m) java:res = m.getColumnCount();
[b]4:创建几种特殊的矩阵[/b]
sas:m*n值全为value的矩阵 m = j(m,n,value);
java:m*n值全为value的矩阵 m = Matrix.factory.ones(m,n).times(value);
对角矩阵
sas:对角线全为1的n维矩阵 m=i(n);
java:对角线全为1的n维矩阵 m=Matrix.factory.eye(n,n);
空矩阵
sas:这个、、、完全没必要,随便写一个变量即为矩阵、、、
java : res = MatrixFactory.emptyMatrix();
[b]5:矩阵与向量以及向量与向量间一一对应相乘[/b]
例如{1 2 3}#{1 2 3}={1 4 9}
{1 2 3, 4 5 6}#{1 2 3}={1 4 9,4 10 18}
sas: res=v1#v2; res=m#v;
java: res=v.times(Calculation.Ret.NEW, true, v1); true是忽略缺失值,缺失值项乘得的结果为0。java暂时只找到向量间一一对应的
[b]6:额。。。这个操作有点难描述[/b]
[b]就是一个数和一个矩阵进行比较,数值相同的赋值为1,不同的变为0,也就是数和矩阵间的异或[/b]
例如m={1,2,3} var=1;
m=var ---->{1,0,0}
sas: res=(m=var);这里返回的结果的表现为{1,0}
java: res=m.euqal(var); 这里返回的结果的表现为{true,false},对返回的矩阵用getValueSum()可以得到double型的所有true的数量
对返回的矩阵用toDoubleMatrix()可以将其转换为1 0的形式
7:求出矩阵中的最大值与最小值
sas: res=max(m); res=min(m);
java: res=m.getMaxValue(); res=m.getMinValue();
[b]8:横向合并和纵向合并[/b]
m1={1 2 3};
m2={1 2 3};
纵向 1 2 3 横向 1 2 3 1 2 3
1 2 3
sas:纵向合并 res=m1//m2; java:纵向合并 m1.appendVertically(m2)
sas:横向合并 rea= m1||m2; java:横向合并 m1.appendHorizontally(m2)
[b]9:转置求逆[/b]
sas: 转置m` 那个点是大键盘一排数字键1左边的点 求逆inv(m)
java: 转置m.transpose() 求逆m.inv()
sas和java的矩阵名一律以[b]m[/b](Means for matrix)表示,
向量一律用[b]v[/b](vector)表示
数值用num表示
[b]结果[/b]用[b]res[/b](result)表示
[b]1:sas创建行向量,列向量和矩阵[/b]
v = {1 2 3 4};行向量
v = {1,2,3,4};列向量
v = {1 2,3 4};矩阵
[b]选择一列或一行/多行或多列[/b]
单行列的情况
sas列 res = m[,j]; java列 res = m.selectColumns(Calculation.Ret.NEW, j);
sas行 res = m[i,]; java行 res = m.selectColumns(Calculation.Ret.NEW, i);
多行列的情况,单这里是针对要么行全部/列全部
sas res = m[,mj]; mj是行向量,这样就可以选取多列多行情况一样。
java res=m.selectColumns(Calculation.Ret.NEW, mj.toLongArray()[0]); 将mj转化为数组的行书进行处理。
截取子矩阵,行列都可以设置
lx->left x ly->left y
rx->right x ry->right y
sas: m[lx:rx,ly:ry];
java: m.subMatrix(Calculation.Ret.NEW, lx, ly, rx, ry)
[b]2:选择矩阵中的distinct值[/b]
sas: res=unique(m);结果以行向量表示
java: res=m.unique(Calculation.Ret.NEW);结果一列向量表示
[b]3:获取矩阵的行数与列数[/b]
sas: res = nrow(m) java:res = m.getRowCount();
sas: res = ncol(m) java:res = m.getColumnCount();
[b]4:创建几种特殊的矩阵[/b]
sas:m*n值全为value的矩阵 m = j(m,n,value);
java:m*n值全为value的矩阵 m = Matrix.factory.ones(m,n).times(value);
对角矩阵
sas:对角线全为1的n维矩阵 m=i(n);
java:对角线全为1的n维矩阵 m=Matrix.factory.eye(n,n);
空矩阵
sas:这个、、、完全没必要,随便写一个变量即为矩阵、、、
java : res = MatrixFactory.emptyMatrix();
[b]5:矩阵与向量以及向量与向量间一一对应相乘[/b]
例如{1 2 3}#{1 2 3}={1 4 9}
{1 2 3, 4 5 6}#{1 2 3}={1 4 9,4 10 18}
sas: res=v1#v2; res=m#v;
java: res=v.times(Calculation.Ret.NEW, true, v1); true是忽略缺失值,缺失值项乘得的结果为0。java暂时只找到向量间一一对应的
[b]6:额。。。这个操作有点难描述[/b]
[b]就是一个数和一个矩阵进行比较,数值相同的赋值为1,不同的变为0,也就是数和矩阵间的异或[/b]
例如m={1,2,3} var=1;
m=var ---->{1,0,0}
sas: res=(m=var);这里返回的结果的表现为{1,0}
java: res=m.euqal(var); 这里返回的结果的表现为{true,false},对返回的矩阵用getValueSum()可以得到double型的所有true的数量
对返回的矩阵用toDoubleMatrix()可以将其转换为1 0的形式
7:求出矩阵中的最大值与最小值
sas: res=max(m); res=min(m);
java: res=m.getMaxValue(); res=m.getMinValue();
[b]8:横向合并和纵向合并[/b]
m1={1 2 3};
m2={1 2 3};
纵向 1 2 3 横向 1 2 3 1 2 3
1 2 3
sas:纵向合并 res=m1//m2; java:纵向合并 m1.appendVertically(m2)
sas:横向合并 rea= m1||m2; java:横向合并 m1.appendHorizontally(m2)
[b]9:转置求逆[/b]
sas: 转置m` 那个点是大键盘一排数字键1左边的点 求逆inv(m)
java: 转置m.transpose() 求逆m.inv()
相关文章推荐
- lumbda表达式的几个例子(lumbda对集合遍历、过滤、转换、合并、创建、最大、最小、平均、总和值、并行流、将数组转换成流)
- JAVA 数组实例-求学生成绩的最大成绩,获取数组中的最大值、最小值
- java 获取一组数据中的最大值和最小值
- python中创建dataframe数据,并将其转换成矩阵,对矩阵进行添加行列操作
- java中数据类型间的最大值,最小值及转换程序代码实现
- java8 获取范围之内的随机数(指定最小,最大值)
- JAVA代码—算法基础:最大子矩阵的和(N*N的矩阵)
- Java实现头像截取裁剪后图片保存,获取的是base64数据,怎么转换为图片并保存到数据库。
- java:图像(BufferedImage)色彩空间转换(灰度)暨获取图像矩阵数据byte[](sRGB/gray)
- Java常识求阶层!的和 ,获取某个数组中的最小值,定义数组,获得成绩之和,平均成绩,最小成绩,最大成绩。等问题大全
- java 获取数组的最大值和最小值
- Java 8 获取某天最大(23:59:59)最小(00:00:00)时间
- STATA 批量重命名,数据查重,行列转换,类型转换,变量截取和生成,数据库合并等命令
- Java 将Long转换成Double类型 获取明年1月份和下个月的年月的形式
- 链家笔试链家——找寻最小消费获取最大平均分java
- Java 8 获取某天最大(23:59:59)最小(00:00:00)时间
- Java实现头像截取裁剪后图片保存,获取的是base64数据,怎么转换为图片并保存到数据库。
- Java实现头像截取裁剪后图片保存,获取的是base64数据,怎么转换为图片并保存到数据库。并读取出来。
- 最大子矩阵和(HD 1559,DP,给定子矩阵行列,O(n^2))
- 根据类Student的定义,创建五个该类的对象,输出每个学生的信息, 计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。