【发布时间】: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])
如何做到这一点?循环和追加?非常感谢提前
【问题讨论】:
我有一个数组(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])
如何做到这一点?循环和追加?非常感谢提前
【问题讨论】:
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)
【讨论】:
单线与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]])
【讨论】: