Matlab转Python问题之多数组拼接

有的时候希望好几个数组可以拼接,就像是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.]]

你可能感兴趣的:(Matlab-Python,python,numpy,开发语言)