1. ホーム
  2. R

R言語 - マトリックス

2022-02-22 19:16:03

このほかにも、以下のように アペンド 関数を使って、元のベクトルに要素を追加することができます。

> append(t,10:15) <スパン

[1] 2 543 3 5 1 10 11 12 13 14 15

A 追加 追加要素です。

元のベクトルは、追加後もその要素の値を変更しません。 は、ベクターの末尾から要素が追加されることを示します。

> c <- c(1,2,3,4)

> prod(c)

<スパン [1] 24

> append(c,6:8)

[1] 1 2 3 4 6 7 8

> append(c,9:12,after=3)

[1] 1 2 3 9 10 11 12 4

> prod(c)

<スパン [1] 24

ベクターの添え字操作。

R 言語でのベクトル添え字の始まりは <スパン 1 <スパン 開始

<スパン 例 1

ベクトルを作成し、その各要素に 4 を使い、その2番目の要素が何であるかを調べます。

> (c(1,3,5,7)+4)[2] のようになります。

[1] 7

2

<スパン 要素の置換

を使用します。

[1] 2 543 3 5 1

> t[2] <- 10>

T

[1] 2 10 3 5 1

3

をクリックします。

[1] 2 543 3 5 1

> t[c(1,3)] <- c(9,11)

> t

[1] 9 10 11 5 1

ベクトルに対する論理演算。

> t

[1] 9 10 11 5 1

> t[t<4]です。    # <スパン を表示します。 t<4 の数

[1] 1

> t[t>9]です。 # <スパン を表示する t>9 の数は

[1] 10 11

ベクター内のすべてのデフォルト値を 0

デフォルト値で新しいベクターを作成します

> x<-c(-1,2,5,6,NA)

> x

[1] -1 2 5 6 ナ

> x[is.na(x)]<-0

> x

[1] -1 2 5 6 0

というベクトルを入れてください。 NA を別のベクトルに

> x<-c(-1,2,5,6,NA)

> x

[1] -1 2 5 6 ナ

> u<-x[!is.na(x)].

> u

[1] -1 2 5 6

変数を入れる s を数値型に変換し、その長さをベクトル X の長さを指定します。 s のデフォルトの要素は、すべての 0

> x

[1] -1 2 5 6 ナ

> <スパン  s<-numeric(length(x))

s

[1] 0 0 0 0 0 0

セグメンテーション関数の表現。

 > y

[1] 1 3 5 7 9

s<-numeric(length(y))

s

[1] 0 0 0 0 0 0

s[s<0] <- y[y<0] とする。

> s[s>=0] <- y[y>=0] + 1

> s

[1] 2 4 6 8 10

もし x が欠損値を持つベクトルである場合、その場合 s この代入はエラーを報告します

> s<-numeric(length(x))

s

[1] 0 0 0 0 0 0

> s[s<0] <- x[x<0].

> s[s>=0] <- x[x>=0] + 1

警告メッセージ:In s[s >= 0] <- x[x >= 0] + 1 :

  置換するアイテムの数が置換長の倍数でない

ベクター 1-5 の要素は表示されません。

<スパン > x <- c(1:10)

> x <スパン

[1] 1 2 3 4 5 6 7 8 9 10

> x[-(1:5)]です。

[1] 6 7 8 9 10

<スパン

R <スパン 言語マトリックス

(a) 行列とは、縦横のデータを並べた表形式の2次元配列で、セルは同じデータ型でなければならない。列は異なる変数を、行は個々のオブジェクトを表すのに使われる。 R 言語生成行列関数 <スパン -matrix

<スパン シンタックス

M ymatrix <- matrix(vector,nrow=number_of_rows,ncol=number_of_columns,

B yrow=logical_value,dimnames=list()。

C har_vector_rowames,char_vector_colnames))。

第1パラメータはデータ,第2パラメータは行数,第3パラメータは列数,第4パラメータはアンパサンドまたはアンパサンド展開,第5パラメータは行列の次元を示す.

> A <- matrix(1:12,nrow=3,ncol=4)

> A

<スパン  [,1] [,2] [,3] [,4]

[1,] 1 4 7 10

[2,] 2 5 8 11

[3,] 3 6 9 12

> T(A)

エラー: 関数 "T" が見つかりませんでした。

> t(A) <スパン <スパン 行列の転置順位

<スパン [,1] [,2] [,3]

[1,] 1 2 3

[2,] 4 5 6

[3,] 7 8 9

[4,] 10 11 12

> x <- 1:10

> x <スパン

[1] 1 2 3 4 5 6 7 8 9 10

> t(x) <スパン

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]

[1,] 1 2 3 4 5 6 7 8 9 10

行列の簡単な操作

> A <- matrix(1:12,nrow=3,ncol=4)

> A

<スパン  [,1] [,2] [,3] [,4]

[1,] 1 4 7 10

[2,] 2 5 8 11

[3,] 3 6 9 12

> t(A) <スパン

<スパン   [,1] [,2] [,3]

[1,] 1 2 3

[2,] 4 5 6

[3,] 7 8 9

[4,] 10 11 12

> B<-A

> A+B

<スパン   [,1] [,2] [,3] [,4]

[1,] 2 8 14 20

[2,] 4 10 16 22

[3,] 6 12 18 24

> A-B

<スパン  [,1] [,2] [,3] [,4]

[1,] 0 0 0 0 0

[2,] 0 0 0 0 0

[3,] 0 0 0 0 0

3*A

<スパン   [,1] [,2] [,3] [,4]

[1,] 3 12 21 30

[2,] 6 15 24 33

[3,] 9 18 27 36

> B <- t(A)

> #2つの行列を掛け合わせる

> A%*%B <スパン

<スパン  [,1] [,2] [,3]

[1,] 166 188 210

[2,] 188 214 240

[3,] 210 240 270

行列の対角要素を求めよ。

> A <- matrix(1:16,nrow=4)

> A

<スパン [,1] [,2] [,3] [,4]

[1,] 1 5 9 13

[2,] 2 6 10 14

[3,] 3 7 11 15

[4,] 4 8 12 16

> diag(A)

[1] 1 6 11 16

> diag(diag(A)) <スパン

<スパン  [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 0 6 0 0

[3,] 0 0 11 0

[4,] 0 0 0 0 16

> diag(4) <スパン # 対角要素の値が 1 である単位行列を生成します。

<スパン    [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 0 1 0 0

[3,] 0 0 1 0

[4,] 0 0 0 0 1

<スパン

行列の逆行列 :solve() 関数を使用します。

> A

<スパン   [,1] [,2] [,3] [,4]

[1,] 1 5 9 13

[2,] 2 6 10 14

[3,] 3 7 11 15

[4,] 4 8 12 16

> solve(A)  #A 反転不可能な行列

solve.default(A)でエラー。

  Lapack ルーチン dgesv: システムは正確に特異である。U[3,3] = 0

# 既約物であることを避けるために正の終端分布に従う行列をランダムに生成し、4X4 の行列とする。

A <- matrix(rnorm(16),4,4)

solve(A)

A <- matrix(rnorm(16),4,4)

> A

           [,1] [,2] [,3] [,4]

[1,] -0.70756823 -1.1234569 1.360924 -0.2375963

[2,] 1.97157201 -1.3441301 1.753795 -1.2241501

[3,] -0.08999868 -1.5231558 1.568365 -0.3278127

[4,] -0.01401725 -0.4219682 1.296756 -2.4124503

> solve(A) <スパン

           [,1] [,2] [,3] [,4]

[1,] -0.05180593 0.4723860 -0.3259291 -0.1903122

[2,] 4.46734372 1.3701835 -5.0357807 -0.4509696

[3,] 4.70043705 1.4725733 -4.6045433 -0.5844802

[4,] 1.74551456 0.5491397 -1.5923475 -0.6487037

> solve(A)%*%A <スパン

MatrixAとMatrixAの逆行列は単位配列であるべきで、コンピュータの計算誤差により非対角要素が0に収束してしまう

       [,1] [,2] [,3] [,4]

[1,] 1.000000e+00 -1.151856e-15 1.137979e-15 -2.220446e-16

[2,] -5.238865e-16 1.000000e+00 1.665335e-15 -4.440892e-16

[3,] 2.255141e-17 -2.053913e-15 1.000000e+00 -2.220446e-16

[4,] -1.387779e-17 -2.220446e-16 -3.330669e-16 1.000000e+00

<スパン

固有値と固有ベクトルを求める。 eigen() 関数

> A

     [,1] [,2] [,3] [,4]

[1,] 2 1 1 1 1

[2,] 1 2 1 1

[3,] 1 1 2 1

[4,] 1 1 1 1 2

> (A.eigen <- eigen(A,symmetric = T))

     # 固有値とは 5,1,1,1

[1] 5 1 1 1

$vector     # 固有ベクトル

     [,1] [,2] [,3] [,4]

[1,] -0.5 0.8660254 0.0000000 0.0000000

[2,] -0.5 -0.2886751 -0.5773503 -0.5773503

[3,] -0.5 -0.2886751 -0.2113249 0.7886751

[4,] -0.5 -0.2886751 0.7886751 -0.2113249

行列を上三角行列に変換する。 chol() 機能

> A

     [,1] [,2] [,3] [,4]

[1,] 2 1 1 1 1

[2,] 1 2 1 1

[3,] 1 1 2 1

[4,] 1 1 1 1 2

コール(A)

         [,1] [,2] [,3] [,4]

[1,] 1.414214 0.7071068 0.7071068 0.7071068

[2,] 0.000000 1.2247449 0.4082483 0.4082483

[3,] 0.000000 0.0000000 1.1547005 0.2886751

[4,] 0.000000 0.0000000 0.0000000 1.1180340

> t(chol(A))%*%chol(A)の場合

     [,1] [,2] [,3] [,4]

[1,] 2 1 1 1 1

[2,] 1 2 1 1

[3,] 1 1 2 1

[4,] 1 1 1 1 2

行列が対称である場合は chol() を使って,行列式と証明の逆数の値を求めます。

<スパン

d <スパン im(A) 行列の場合 A の次元数です。

nrow(A) マトリックス A の行数です。

ncol(A) マトリックス A の列数です。

rowSums(A) 行の和をとる。

colSums(A) 列の和をとる

colMeans() 行列の行と列を意味します。

> A

     [,1] [,2] [,3] [,4]

[1,] 2 1 1 1 1

[2,] 1 2 1 1

[3,] 1 1 2 1

[4,] 1 1 1 1 2

> dim(A)

[1] 4 4

> nrow(A)

[1] 4

> ncol(A)

[1] 4

> rowSums(A)

[1] 5 5 5 5

> colSums(A)

[1] 5 5 5 5 5

<スパン

<スパン

<スパン

<スパン

<スパン

<スパン

<スパン

<スパン

<スパン

<スパン

方法1:行列の上三角行列と下三角行列。 up.tri();low.tri()。

> A<- matrix(1:16,4)

> A

     [,1] [,2] [,3] [,4]

[1,] 1 5 9 13

[2,] 2 6 10 14

[3,] 3 7 11 15

[4,] 4 8 12 16

> low.tri(A)の場合

      [,1] [,2] [,3] [,4]

[1,] false false false

[2,] true false false false

[3,] true true false false

[4,] true true false

> A[lower.tri(A)] <-0     # 下三角行列

> A

     [,1] [,2] [,3] [,4]

[1,] 1 5 9 13

[2,] 0 6 10 14

[3,] 0 0 11 15

[4,] 0 0 0 0 16

> A[up.tri(A)].

<スパン <- 0

A[up.tri(A)] でエラー <- 0 : 関数 "up.tri" が見つかりませんでした。

> A[upper.tri(A)] <- 0     # 上三角行列

> A

     [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 0 6 0 0

[3,] 0 0 11 0

[4,] 0 0 0 0 16

> A

     [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 0 6 0 0

[3,] 0 0 11 0

[4,] 0 0 0 0 16

> A<- matrix(1:16,4)

> A[upper.tri(A)] <- 0

> A

     [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 2 6 0 0

[3,] 3 7 11 0

[4,] 4 8 12 16

> A[lower.tri(A)] = 0

> A

     [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 0 6 0 0

[3,] 0 0 11 0

[4,] 0 0 0 0 16

方法2:行列の下三角形配列と上三角形配列を求める

のすべての要素について、行の下表の位置が列の下表の位置より小さいとする。 0 は、その ---- <スパン 下三角形陣。

> A<- matrix(1:16,4)

> A

     [,1] [,2] [,3] [,4]

[1,] 1 5 9 13

[2,] 2 6 10 14

[3,] 3 7 11 15

[4,] 4 8 12 16

行(A)

     [,1] [,2] [,3] [,4]

[1,] 1 1 1 1 1

[2,] 2 2 2 2 2

[3,] 3 3 3 3 3

[4,] 4 4 4 4

> col(A)

     [,1] [,2] [,3] [,4]

[1,] 1 2 3 4

[2,] 1 2 3 4

[3,] 1 2 3 4

[4,] 1 2 3 4

A[行(A)<列(A)]=0

> A

     [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 2 6 0 0

[3,] 3 7 11 0

[4,] 4 8 12 16

> A[row(A)>col(A)]=0とする。

> A

     [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 0 6 0 0

[3,] 0 0 11 0

[4,] 0 0 0 0 16

行列の行列式の値を計算する。 det(A)

> A

     [,1] [,2] [,3] [,4]

[1,] 1 0 0 0 0

[2,] 0 6 0 0

[3,] 0 0 11 0

[4,] 0 0 0 0 16

> det(A)

<スパン [1] 1056

行列をベクトル化演算子に変換します(ここに小さな関数を記述する必要があります).

> vec<-function(x){。 <未定義

+ t(t(as.vector(x)))

+ }

> A<-matrix(1:12,3,4)

> vec(A)

<未定義