您的位置:首页 > 产品设计 > UI/UE

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐