数组增加一个元素、增加一列、增加一行——Python & Matlab

目录

1 引言

2 Matlab实现方式

3 Python实现方式

4 补充说明

4.1 数组赋值

4.2 append()函数


1 引言

Matlab和Python在处理数组时有很多不同点,比如Python里索引是从0开始而Matlab里面索引是从1开始,Python里面用符号[]来对数组索引而Matlab里面是用符号()........等等。而我觉得最大的不同点就是Matlab不需要对数组初始化,而Python需要对初始化,这就导致数组的有些操作在语法上差别很大:

① 由于数组的创建、索引(切片)、修改元素、删除元素都是在最终数组的size已知的情况下进行的操作,所以这些操作在Python和Matlab里面的语法基本保持一致;
② 数组增加元素有可能是最终数组的size不知道的情况下进行的,这就导致Matlab和Python数组增加元素的语法差别很大。

增加元素有三种常用场景:一维数组增加一个元素、二维数组增加一行、二维数组增加一列

2 Matlab实现方式

clc,clear
n=4 %循环次数
a=1;%增加的元素
b=[10,20,30];%增加的行向量
c=[100,200,300]';%增加的列向量
for i=1:n
    A(i)=1; %一维数组在尾端增加一个元素
    B(i,:)=b; %二维数组在尾端增加一行
    C(:,i)=c; %二维数组在尾端增加一列
end
A,B,C

采用matlab实现时,由于不需要初始化,所以无论数组最终的size是否已知都可以采用上述的语法实现数组元素的增加。这种数组操作的场景是非常常见的。

3 Python实现方式

场景一:已知最终数组的size

这种场景比较简单,直接对数组初始化,然后再不停地修改元素即可。

import numpy as np
n=4 #循环的次数
a=1 #增加的元素
b=np.array([10,20,30]) #增加的行向量
c=np.array([100,200,300]) #增加的列向量
#数组初始化#
A=np.zeros(n)
B=np.zeros((n,3)) #这里的3根据要添加的行向量的列数确定
C=np.zeros((3,n)) #这里的3根据要添加的列向量的行数确定
#数组赋值#
for i in range(n):
    A[i]=a     #一维数组增加一个元素
    B[i,:]=b   #二维数组增加一行
    C[:,i]=c   #二维数组增加一列
print(A)
print(B)
print(C)

场景二:不确定最终数组的size

因为循环可能中途停止,导致最终数组的size不知道,无法对数组初始化。思路:是先新建一个空数组(一维或者二维),然后再不停地增加行或者列。采用append()函数实现。

import numpy as np
a=1 #增加的元素
b=np.array([[10,20,30]]) #增加的行,shape=(1,3).注意大小(1,3)和(,3)的区别
c=np.array([[100,200,300]]).T #增加的列,shape=(3,1)
#数组初始化#
A=np.empty(0)#初始化为一维空数组,数组大小为(0,)
B=np.empty((0,3))  #初始化为二维空数组,数组大小为(0,3),这里的3根据要添加的行的列数确定
C=np.empty((3,0))  #初始化为二维空数组,数组大小为(3,0),这里的3根据要添加的列的行数确定
#数组赋值#
judge=1
i=1
while judge:
    A=np.append(A,a)
    B=np.append(B,b,axis=0) #按行,被添加的b必须是大小为(1,3)的二维数组
    C=np.append(C,c,axis=1)   #按列,被添加的c必须是大小为(3,1)的二维数组
    if i>=4:
        judge=0
    i=i+1
print(A)
print(B)
print(C)

如果是插入元素可以采用函数insert()代替append()来进行操作。

4 补充说明

4.1 数组赋值

数组按行或者按列赋值时,

import numpy as np
A=np.array([[1,2,3],[4,5,6],[7,8,9]]) #二维数组,shape=(3,3)
B=np.array([[1,2,3],[4,5,6],[7,8,9]]) #二维数组,shape=(3,3)
a=np.array([1,3,1]) #向量,shape=(3,)
b=np.array([[1,2,1]]) #1行二维数组,shape=(1,3)
c=b.T #1列二维数组,shape=(3,1)
A[0,:]=a #按行赋值
A[1,:]=b #按行赋值
B[:,0]=a #按列赋值
B[:,1]=c #按列赋值
print(A)
print(B)

此时B[:,1]=c会报错:could not broadcast input array from shape (3,1) into shape (3,)。将c换成1行二维数组代码如下:

import numpy as np
A=np.array([[1,2,3],[4,5,6],[7,8,9]]) #二维数组,shape=(3,3)
B=np.array([[1,2,3],[4,5,6],[7,8,9]]) #二维数组,shape=(3,3)
a=np.array([1,3,1]) #向量,shape=(3,)
b=np.array([[1,2,1]]) #1行二维数组,shape=(1,3)
c=b.T #1列二维数组,shape=(3,1)
A[0,:]=a #按行赋值
A[1,:]=b #按行赋值
B[:,0]=a #按列赋值
B[:,1]=c.T #按列赋值
print(A)
print(B)

运行结果如下:

[[1 3 1]
 [1 2 1]
 [7 8 9]]

[[1 1 3]
 [3 2 6]
 [1 1 9]]

从中可以看出,对于数组来讲,无论是行赋值还是列赋值,都必须是向量或者1行二维数组,1列二维数组无法赋值成功。因此为了防止出错,最好统一标准,在给数组按行或者按列赋值时,被赋予的值统一采用向量。

4.2 append()函数

① append()函数使用时

import numpy as np
A=np.array([[1,2,3],[4,5,6]]) #二维数组,shape=(2,3)
B=np.array([1,1,1]) #向量,shape=(3,)
A=np.append(A,B,axis=0) #按行添加
print(A)

如果添加的是向量,此时会报错:all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)。

将向量转换为二维数组就能实现目标操作。

import numpy as np
A=np.array([[1,2,3],[4,5,6]]) #二维数组,shape=(2,3)
B=np.array([1,1,1]) #向量,shape=(3,)
B=B[:,np.newaxis].T #二维数组,shape=(1,3)
A=np.append(A,B,axis=0) #按行添加 ,添加的元素必须是二维数组,axis=0是按行添加
A=np.append(A,B.T,axis=1) #按列添加 ,添加的元素必须是二维数组,axis=1是按列添加
print(A)

运行结果如下:

[[1 2 3 1]
 [4 5 6 1]
 [1 1 1 1]]

从中可以看出,append()函数按行添加时,添加的是1行二维数组;按列添加时,添加的是1列二维数组。

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dfreedom.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值