python list和numpy常用拼接方式

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.


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

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
a
>>> [1, 'a', 'b', 'c', 2, 3, 4]

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

1,不增加维度

记得要指定拼接的 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]])

可以传入一个包含多个 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]])

可以传入一个包含多个 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]])

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的维度。

以一维的 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]])

以一维的 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]])

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

Original: https://blog.csdn.net/weixin_39925939/article/details/122211680
Author: 每天都想躺平的大喵
Title: python list和numpy常用拼接方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/758539/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球