python numpy append_Numpy简单实现List的append和extend函数

由于numpy中的append函数本质上是数组拼接,但是在初始化数组为空时,直接append或者使用其他命令(如concatenate)会出现维度错误。解决办法是需要手动reshape为数据的形状,使用起来不是很方便。

在python list中的两种方法append和extend函数在一定程度上使用非常灵活,但是对于数据大的数组而言效率比较低,所以才有了自己封装两个简单的函数来说解决上述问题的想法。

def np_extend(a, b, axis = 0):

if a is None:

shape = list(b.shape)

shape[axis] = 0

a = np.array([]).reshape(tuple(shape))

return np.append(a, b, axis)

def np_append(a, b):

shape = list(b.shape)

shape.insert(0, -1)

if a is None:

a = np.array([]).reshape(tuple(shape))

return np.append(a,b.reshape(tuple(shape)), axis = 0)

初始化两个array:

c = np.arange(12).reshape(3,4)

a = None

b = None

运行的效果:

# append

a = np_append(a,c)

print(a)

# 结果:

array([[[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.]],

[[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.]],

[[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.]],

[[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.]]])

# extend

a = np_extend(a,c,1)

b = np_extend(b,c,0)

print(a,b)

# 结果:

(array([[ 0., 1., 2., 3., 0., 1., 2., 3.],

[ 4., 5., 6., 7., 4., 5., 6., 7.],

[ 8., 9., 10., 11., 8., 9., 10., 11.]]),

array([[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.],

[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.]]))

看起来满足要求而又比python list多了一个横向扩展的功能。

另外pandas的append也可以不用事先定义形状,但是要求所有矩阵都是要封装成pandas的DataFrame类型才可以,而且只有append没有extend功能。

你可能感兴趣的:(python,numpy,append)