1. 联系
1)np.concatenate和np.append与list.extend在功能上有点相似,都是把元素添加。而list.append如果append的对象是list会将整个list作为一个元素加入。
a = [1]
b = [3, 4]
a.append(b)
print("a.append(b):", a)
c = [5]
d = [6, 7]
c.extend(d)
print("c.extend(d):", d)
f = np.array([8])
g = np.array([9, 10])
print("np.concatenate((f,g)):", np.concatenate((f, g)))
h = np.array([11])
i = np.array([12, 13])
print("np.append(h, i):", np.append(h, i))
2. 区别
1)np.concatenate和np.append都是有返回值的,需要赋值。而list.extend和list.append可以直接用。
#narray 需要赋值
a,b = np.array([1]), np.array([2])
a = np.append(a,b)
a = np.concatenate(a,b)
#list 不需要赋值
c, d = [1],[2]
c.append(d)
c.extend(d)
2) np.concatenate和np.append的区别是,np.concatenate要求连接的两个array维度完全一致,np.append不需要。同时np.concatenate还需要将两个要连接的array通过元组的形式给出,否则会报错:TypeError: only integer scalar arrays can be converted to a scalar index。
a = np.array([1, 3, 4])
b = np.concatenate((a, 100)) # 错误
c = np.concatenate((a, [100])) # 正确
d = np.concatenate(a, 100) # 报错
e = np.append(a, 100) # 正确
3)在大数据处理时,list就显得有点低效了,np.concatenate是处理大数据效率最高的,那么如果想用np.concatenate实现一个三维array添加一个矩阵,这个时候有个细节要注意,那就是要先将这个矩阵reshape成三维的。
a = [[[1,2],[3,4]]]
b = [[5,6],[7,8]]
a.append(b) # 正确
a = np.array([[[1,2],[3,4]]])
b = np.array([[5,6],[7,8]])
c = np.concatenate((a,b)) # 错误
c = np.concatenate((a,b.reshape(1,2,2)))# 正确