有的时候希望好几个数组可以拼接,就像是Matlab中,可以直接使用arr = [a,b,c],或者
arr = [a;b;c],不过确实没找到什么办法,所以很苦恼,然后自己就动手写了个函数,萌新代码多多包涵,希望可以帮助到你,共勉。
def concentrate_arrs(*args, axis=0, h=0):
"""
:param args:
:param axis: 0是横着合并,1是竖着合并
:param h: 0是把一维数组变成一行,1是变成一列
:return:
"""
new_arr = {}
for i, arr in enumerate(args):
if not isinstance(arr, np.ndarray) or arr.ndim == 1:
if h == 0:
new_arr[i] = np.array([arr]).reshape((1, -1))
else:
new_arr[i] = np.array([arr]).reshape((1, -1))
else:
new_arr[i] = arr
if axis == 0:
temp = new_arr[0]
for i in range(1, len(new_arr)):
temp = np.hstack((temp, new_arr[i]))
return temp
else:
temp = new_arr[0]
for i in range(1, len(new_arr)):
temp = np.vstack((temp, new_arr[i]))
return temp
测试
aa = concentrate_arrs(2, 3, 4 * np.ones((3)))
print(aa)
out:array([[2., 3., 4., 4., 4.]])
aa = concentrate_arrs(2* np.ones((2)), 3* np.ones((2)), 4 * np.ones((2)))
print(aa)
out:[[2. 2. 3. 3. 4. 4.]]
aa = concentrate_arrs(2 * np.ones((2, 2)), 3 * np.ones((2, 2)), 4 * np.ones((2, 2)))
print(aa)
out:[[2. 2. 3. 3. 4. 4.]
[2. 2. 3. 3. 4. 4.]]
aa = concentrate_arrs(2 * np.ones((2, 2)), 3 * np.ones((2, 2)), 4 * np.ones((2, 2)), axis=1)
print(aa)
out:[[2. 2.]
[2. 2.]
[3. 3.]
[3. 3.]
[4. 4.]
[4. 4.]]
aa = concentrate_arrs(2, 3, 4 * np.ones((3, 1)), axis=1)
print(aa)
out:[[2.]
[3.]
[4.]
[4.]
[4.]]