• sas转java(1)截取子矩阵、unique、获取矩阵的行列数、创建特殊矩阵、求矩阵中的最大最小值、横纵合并矩阵、将矩阵转换为0,1形式、转置求逆


    这里java的矩阵运算用的是ujmp包

    sas和java的矩阵名一律以m(Means for matrix)表示,

    向量一律用v(vector)表示

    数值用num表示

    结果res(result)表示

    1:sas创建行向量,列向量和矩阵

    v = {1 2 3 4};行向量

    v = {1,2,3,4};列向量

    v = {1 2,3 4};矩阵

    选择一列或一行/多行或多列

    单行列的情况

    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)

    2:选择矩阵中的distinct值

    sas:    res=unique(m);结果以行向量表示

    java:   res=m.unique(Calculation.Ret.NEW);结果一列向量表示

    3:获取矩阵的行数与列数

    sas:       res = nrow(m)             java:res = m.getRowCount();

    sas:   res = ncol(m)      java:res = m.getColumnCount();

    4:创建几种特殊的矩阵

    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();

    5:矩阵与向量以及向量与向量间一一对应相乘

    例如{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暂时只找到向量间一一对应的

    6:额。。。这个操作有点难描述

    就是一个数和一个矩阵进行比较,数值相同的赋值为1,不同的变为0,也就是数和矩阵间的异或

    例如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();

    8:横向合并和纵向合并

    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)

    9:转置求逆

    sas:   转置m` 那个点是大键盘一排数字键1左边的点          求逆inv(m)

    java: 转置m.transpose()               求逆m.inv()

  • 相关阅读:
    数据库各类模板
    React+Cesium安装部署
    VS2019+QT 制作自定义控件
    Vue+arcgis(1)
    将TIF/PNG等转为GeoTIFF
    QT 同名信号无法识别的问题
    VSCode配置PyQt5
    Python中类属性和self属性的区别
    postgresql的数据复制
    在windows server 2012 R2上搭建nginx环境
  • 原文地址:https://www.cnblogs.com/yican/p/4136022.html
Copyright © 2020-2023  润新知