📜  如何在 Octave 中加载和修改矩阵和向量?

📅  最后修改于: 2022-05-13 01:55:36.133000             🧑  作者: Mango

如何在 Octave 中加载和修改矩阵和向量?

在本文中,我们将了解如何在 Octave 中加载和使用矩阵和向量中的数据。以下是有关 Octave 中的矩阵和向量的一些基本命令和函数:

1. 矩阵的维度:我们可以使用size()函数找到矩阵或向量的维度。

% declaring the matrix 
M = [1 2 3; 4 5 6; 7 8 9];
  
% dimensions of the matrix
size(M)
  
% number of rows
rows = size(M, 1)
  
% number of columns
cols = size(M, 2)

输出 :

ans =

   3   3

rows =  3
cols =  3

2.访问矩阵的元素:可以通过在括号中传递元素的位置来访问矩阵的元素。在 Octave 中,索引从 1 开始。

% declaring the matrix 
M = [1 2 3; 4 5 6; 7 8 9];
  
% accessing the element at index (2, 3) 
% i.e. 2nd row and 3rd column
M(2, 3)
  
% print the 3rd row
M(3, : ) 
  
% print the 1st column
M(:, 1)
  
% print every thing from 1st and 3rd row
M([1, 3], : )

输出 :

ans =  6 

ans =

   7   8   9

ans =

   1
   4
   7

ans =

   1   2   3
   7   8   9  

3. 最长维度: length()函数返回矩阵/向量的最长维度的大小。

% declaring the row vector
M1 = [1 2 3 4 5 6 7 8 9 10];
len_M1 = length(M1)
  
% declaring the matrix
M2 = [1 2 3; 4 5 6];
len_M2 = length(M2)

输出 :

len_M1 =  10
len_M2 =  3

4. 加载数据:首先让我们看看如何在 Octave 中识别目录:

% see the present working directory
pwd   
  
% see the directory's of the folder in which you are
ls

输出 :

ans = /home/dikshant
derby.log  Desktop  Documents  Downloads  Music  Pictures  Public  ${system:java.io.tmpdir}  Templates  Videos

现在在加载数据之前,我们需要将当前工作目录更改为存储数据的位置。我们可以使用cd命令执行此操作,然后按如下方式加载它:

% changing the directory
cd /home/dikshant/Documents/Octave-Project
  
% list the data present in this directory
ls

输出 :

Feature.dat  target.dat

在这里,我们将学生的分数数据作为特征,将他们的分数作为目标变量。
这是 Feature.dat 文件,包含 25 条学生的学习时间记录。

这是由 25 条学生成绩记录组成的 target.dat 文件。

我们可以在 Octave 中使用load命令加载文件,实际上有两种方法可以加载数据,要么简单地使用 load 命令,要么使用文件名作为 load() 中的字符串。我们可以使用Featuretarget等文件的名称来打印其数据。

% loading Feature.dat
load Feature.dat % or load('Feature.dat')
  
% loading target.dat
load target.dat  % or load('target.dat')
  
% print Feature data
Feature 
  
% print target data
target
  
% displaying the size of Feature file i.e. the number of data records and column
Feature_size = size(Feature) 
  
% displaying the size of target file i.e. the number of data records and column
target_size = size(target)

输出 :

Feature =

   2.5000
   5.1000
   3.2000
   8.5000
   3.5000
   1.5000
   9.2000
   5.5000
   8.3000
   2.7000
   7.7000
   5.9000
   4.5000
   3.3000
   1.1000
   8.9000
   2.5000
   1.9000
   6.1000
   7.4000
   2.7000
   4.8000
   3.8000
   6.9000
   7.8000

target =

   21
   47
   27
   75
   30
   20
   88
   60
   81
   25
   85
   62
   41
   42
   17
   95
   30
   24
   67
   69
   30
   54
   35
   76
   86

Feature_size =

   25    1

target_size =

   25    1

我们可以使用who命令来了解当前 Octave 范围内的变量,或者使用whos来获得更详细的描述。

% using the who command
who
  
% using the whos command
whos

输出:

Variables in the current scope:

Feature  M        M1       M2       ans      target

Variables in the current scope:

   Attr Name         Size                     Bytes  Class
   ==== ====         ====                     =====  =====
        Feature     25x1                        200  double
        M            3x3                         72  double
        M1           1x10                        80  double
        M2           2x3                         48  double
        ans          1x2                         16  double
        target      25x1                        200  double

Total is 77 elements using 616 bytes

我们还可以从加载的文件中选择一些行,例如在我们的案例中,Feature 和 target 中存在 25 条记录数据,我们可以创建一些其他变量来存储修剪后的数据行,如下所示:

% storing initial 5 records of Feature in var
var = Feature(1:5)
  
% storing initial 5 records of target in var1
var1 = target(1:5)
  
% saving the data of var in a file named modified_Feature.mat in binary format
modified_Feature.mat in binary format
  
% saving the data of var1 in a file named modified_target.mat in binary format
modified_target.mat in binary format
  
% saves the data in a readable format
save Feature_data.txt var -ASCII

输出:

var =

   2.5000
   5.1000
   3.2000
   8.5000
   3.5000

var1 =

   21
   47
   27
   75
   30

5. 修改数据:现在让我们看看如何修改矩阵和向量的数据。

% declaring the matrix
M = [1 2 3; 4 5 6; 7 8 9];
  
% modifying the data of 2nd column for each entry
M(:, 2) = [54; 56; 98]
  
% declaring the matrix
m = [0 0 0; 0 0 0; 0 0 0];
  
% modifying the data of 3nd row for each entry
m(3, 🙂 = [100; 568; 987]

输出 :

M =

    1   54    3
    4   56    6
    7   98    9

m =

     0     0     0
     0     0     0
   100   568   987

我们还可以在现有矩阵中追加新的列和行:

% declaring the matrix
M = [1 2 3; 4 5 6; 7 8 9];
  
% appending the new column vector to your matrix
M = [M, [20;30;40]];
  
% putting all values of matrix M in a single column vector
M(:)

输出 :

ans =

    1
    4
    7
    2
    5
    8
    3
    6
    9
   20
   30
   40

我们还可以连接 2 个不同的矩阵:

% declaring the matrices
a = [10 20; 30 40; 50 60];
b = [11 22; 33 44; 55 66];
  
% concatenate matrix as "a" on the left and "b" on the right
c = [a b]
  
% concatenate matrix as "a" on the top and "b" on the bottom
c = [a ; b]

输出 :

c =

   10   20   11   22
   30   40   33   44
   50   60   55   66

c =

   10   20
   30   40
   50   60
   11   22
   33   44
   55   66