python list和numpy常用拼接方式

list

1,加号+

注意对list使用+时,不是计算符,而是拼接操作。

a = [1,2,3,4]
b = ['a', 'b', 'c']
a+b
>>> [1, 2, 3, 4, 'a', 'b', 'c']

2,乘号*

注意对list使用*时,不是计算符,而是复制拓展操作。

a = [1,2,3,4]
a*2
>>> [1, 2, 3, 4, 1, 2, 3, 4]

3,append vs extend

append是在list末尾增加一个元素,extend才是在list末尾进行拼接操作。appendextend都是直接修改原list.

# append
a = [1,2,3,4]
b = ['a', 'b', 'c']
a.append(b)
a
>>> [1, 2, 3, 4, ['a', 'b', 'c']]
# extend
a = [1,2,3,4]
b = ['a', 'b', 'c']
a.extend(b)
a
>>> [1, 2, 3, 4, 'a', 'b', 'c']

4,切片,将一个list插入另一个list的指定位置

+extend都只是在原list末尾的操作,切片则可以实现将一个list插入另一个list的指定位置。
L1[n1:n1] = L2,其中n1是要插入的位置。具体看以下实例:

a = [1,2,3,4]
b = ['a', 'b', 'c']
a[1:1] = b  # 插入index 1的位置
a
>>> [1, 'a', 'b', 'c', 2, 3, 4]

可以看到b被插入a中1的位置。

numpy

1,不增加维度

1.1, np.append(arr, values, axis=None)

记得要指定拼接的axis,如果不指定,arrvalues会被flatten。

import numpy as np
a = np.arange(12).reshape(3,4)
b = a*2

np.append(a, b)
>>> array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,  0,  2,  4,  6,  8,
       10, 12, 14, 16, 18, 20, 22])
       
# 垂直拼接
np.append(a, b, axis=0)
>>> array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [ 0,  2,  4,  6],
       [ 8, 10, 12, 14],
       [16, 18, 20, 22]])

# 水平拼接
np.append(a, b, axis=1)
>>> array([[ 0,  1,  2,  3,  0,  2,  4,  6],
       [ 4,  5,  6,  7,  8, 10, 12, 14],
       [ 8,  9, 10, 11, 16, 18, 20, 22]])

1.2, np.hstack(tup) 水平拼接,可多个array

可以传入一个包含多个arraytuple,因此可以进行多个array的拼接。

import numpy as np
a = np.arange(12).reshape(3,4)
b = a*2
np.hstack((a,b,a))
>>> array([[ 0,  1,  2,  3,  0,  2,  4,  6,  0,  1,  2,  3],
       [ 4,  5,  6,  7,  8, 10, 12, 14,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 16, 18, 20, 22,  8,  9, 10, 11]])

1.3, np.vstack(tup) 垂直拼接,可多个array

可以传入一个包含多个arraytuple,因此可以进行多个array的拼接。

import numpy as np
a = np.arange(12).reshape(3,4)
b = a*2
np.vstack((a,b,a))
>>> array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [ 0,  2,  4,  6],
       [ 8, 10, 12, 14],
       [16, 18, 20, 22],
       [ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

1.4,np.concatenate((a1, a2, …)),可多个array

np.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind"),这是完整的参数,因此也是可以实现多个array的拼接,还可以指定dtype

import numpy as np
a = np.arange(12).reshape(3,4)
b = a*2
np.concatenate((a, b, a), axis=1, dtype=float)
>>> array([[ 0.,  1.,  2.,  3.,  0.,  2.,  4.,  6.,  0.,  1.,  2.,  3.],
       [ 4.,  5.,  6.,  7.,  8., 10., 12., 14.,  4.,  5.,  6.,  7.],
       [ 8.,  9., 10., 11., 16., 18., 20., 22.,  8.,  9., 10., 11.]])

2, 增加维度

以上几个拼接方法后,产生的array与原来的array相比,维度并没有发生变化。而以下几个方法增加array的维度。

2.1, np.column_stack(tup),可多个一维array

以一维的array为列,拼接成二维的array

import numpy as np
a = np.arange(4)
b = a*2
np.column_stack((a,b,a))
>>> array([[0, 0, 0],
       [1, 2, 1],
       [2, 4, 2],
       [3, 6, 3]])

2.2, np.row_stack(tup),可多个一维array

以一维的array为行,拼接成二维的array

import numpy as np
a = np.arange(4)
b = a*2
np.row_stack((a,b,a))
>>> array([[0, 1, 2, 3],
       [0, 2, 4, 6],
       [0, 1, 2, 3]])

2.3, np.stack(arrays, axis=0, out=None)

np.stack沿着指定的维度stack arrays,从而在指定的维度上增加了一维。
通过以下简单示例对比一下stack后的维度

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

np.stack((a,a), axis=0).shape
>>> (2, 3, 4)
np.stack((a,a), axis=1).shape
(3, 2, 4)
>>> np.stack((a,a), axis=2).shape
(3, 4, 2)

参考博文:
1,https://blog.csdn.net/roytao2/article/details/54180182
2,https://blog.csdn.net/qq_39516859/article/details/80666070

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值