【问题标题】:Replace columns in a 2D numpy array by columns from another2D array用另一个二维数组中的列替换 2D numpy 数组中的列
【发布时间】:2019-06-05 13:05:14
【问题描述】:

我有两个二维数组,我想创建第一个数组的副本,然后用第二个数组中的其他列替换一些列。

M1 = np.array([[1.0, 2.0, 3.0, 1.0, 2.0, 3.0], 
               [4.0, 5.0, 6.0, 4.0, 5.0, 6.0]])

M2 = np.array([[1.1, 2.1, 3.1, 1.2, 2.2, 3.2],
               [4.1, 5.1, 6.1., 4.2, 5.2, 6.2]])

我想做一个可以给出以下数组的循环:

M3 = np.array([[1.1, 2.0, 3.0, 1.2, 2.0, 3.0], 
               [4.1, 5.0, 6.0, 4.2, 5.0, 6.0]])

M4 = np.array([[1.0, 2.1, 3.0, 1.0, 2.2, 3.0], 
               [4.0, 5.1, 6.0, 4.0, 5.2, 6.0]])

M5 = np.array([[1.0, 2.0, 3.1, 1.0, 2.0, 3.2], 
               [4.0, 5.0, 6.1, 4.0, 5.0, 6.2]])

【问题讨论】:

    标签: python-3.x numpy indexing


    【解决方案1】:

    你可以使用np.where:

    selector = [1,0,0,1,0,0]
    np.where(selector,M2,M1)
    # array([[1.1, 2. , 3. , 1.2, 2. , 3. ],
    #        [4.1, 5. , 6. , 4.2, 5. , 6. ]])
    selector = [0,1,0,0,1,0]
    np.where(selector,M2,M1)
    # array([[1. , 2.1, 3. , 1. , 2.2, 3. ],
    #        [4. , 5.1, 6. , 4. , 5.2, 6. ]])
    

    等等

    或者在循环中:

    M3,M4,M5 = (np.where(s,M2,M1) for s in np.tile(np.identity(3,bool), (1,2)))
    M3
    # array([[1.1, 2. , 3. , 1.2, 2. , 3. ],
    #        [4.1, 5. , 6. , 4.2, 5. , 6. ]])
    M4
    # array([[1. , 2.1, 3. , 1. , 2.2, 3. ],
    #        [4. , 5.1, 6. , 4. , 5.2, 6. ]])
    M5
    # array([[1. , 2. , 3.1, 1. , 2. , 3.2],
    #        [4. , 5. , 6.1, 4. , 5. , 6.2]])
    

    或者,您可以复制M1,然后切入M2。这更冗长但应该更快:

    n = 3
    Mj = []
    for j in range(n):
        Mp = M1.copy()
        Mp[:,j::n] = M2[:,j::n]
        Mj.append(Mp)
    
    M3,M4,M5 = Mj
    

    【讨论】:

    • 如果我有大量的列并且我想指定每'n'列选择一个。
    • @ElenaPopa 是 n 的多个列的数量?
    • @ElenaPopa 没关系。我添加了一种无论如何都有效的方法。我很确定它也会更快,所以如果你的数组很大,我推荐它。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2019-05-05
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多