【问题标题】:How to create new array based on position in python?如何根据python中的位置创建新数组?
【发布时间】:2019-08-06 11:45:19
【问题描述】:

我有一个数组(b),我想根据(a)数组中1的位置添加新行。

a=np.array([1,1,0,1,0]

b=np.array([1,2,3,4,5])

我需要像这样创建一个新数组:

Output: array([1,2,3,4,5],[1,0,0,0,0],[0,1,0,0,0],[0,0,0,1,0])

如何做到这一点?循环和追加?非常感谢提前

【问题讨论】:

    标签: python arrays loops numpy


    【解决方案1】:
    def solution(a, b):
        result = [b]
        for i, elem in enumerate(a):
            if elem == 1:
                temp = [0] * len(a)
                temp[i] = 1
                result.append(temp)
        return np.array(result)
    

    【讨论】:

    • 对您的代码进行解释可以帮助读者更好地理解您的答案。
    【解决方案2】:

    单线与broadcasting -

    In [14]: np.vstack((b,np.arange(len(a)) == np.flatnonzero(a)[:,None]))
    Out[14]: 
    array([[1, 2, 3, 4, 5],
           [1, 0, 0, 0, 0],
           [0, 1, 0, 0, 0],
           [0, 0, 0, 1, 0]])
    

    使用zeros-initialized 数组-

    In [17]: s = a.sum()
    
    In [18]: c = np.zeros((s,len(a)),dtype=b.dtype)
    
    In [20]: c[np.arange(s),np.flatnonzero(a)] = 1
    
    In [21]: np.vstack((b,c))
    Out[21]: 
    array([[1, 2, 3, 4, 5],
           [1, 0, 0, 0, 0],
           [0, 1, 0, 0, 0],
           [0, 0, 0, 1, 0]])
    

    【讨论】:

    • 非常感谢您的回答!真正有用的信息,只需一行!
    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多