注意对list
使用+
时,不是计算符,而是拼接操作。
a = [1,2,3,4]
b = ['a', 'b', 'c']
a+b
>>> [1, 2, 3, 4, 'a', 'b', 'c']
注意对list
使用*
时,不是计算符,而是复制拓展操作。
a = [1,2,3,4]
a*2
>>> [1, 2, 3, 4, 1, 2, 3, 4]
append
是在list
末尾增加一个元素,extend
才是在list
末尾进行拼接操作。append
和extend
都是直接修改原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']
+
和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的位置。
记得要指定拼接的axis
,如果不指定,arr
和values
会被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]])
可以传入一个包含多个array
的tuple
,因此可以进行多个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]])
可以传入一个包含多个array
的tuple
,因此可以进行多个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.]])
以上几个拼接方法后,产生的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