numpy 列表解析中针对多个数组的多个动作

niknxzdl  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(152)

我想用另一个数组nparray2 = np.array([8,7,4])中的值替换数组nparray1 = np.array([1, 1, 0, 0, 1])中的“1”,以生成nparray1 = np.array([8, 7, 0, 0, 4])
我希望尽可能高效地完成这个过程,因此我认为使用列表解析是最好的选择,然而,我无法找到一种方法来完成这个过程。

nparray1 = np.array([1, 1, 0, 0, 1])
nparray2 = np.array([8,7,4])

for i in range(len(nparray1)):
    if nparray1[i]==True:
        nparray1[i] = nparray2[0]
        nparray2    = nparray2[1:]
hmtdttj4

hmtdttj41#

您可以用途:

nparray1[nparray1 == 1] = nparray2
print(nparray1)

# Output
array([8, 7, 0, 0, 4])
eufgjt7s

eufgjt7s2#

或者,我认为您也可以跟踪idx变量,只有当您在第一个numpy数组中看到1时才递增该变量。

nparray1 = np.array([1, 1, 0, 0, 1])
nparray2 = np.array([8,7,4])

idx = 0;
for i in range(len(nparray1)):
    if nparray1[i] == 1: 
        nparray1[i] = nparray1[i] * nparray2[idx]
        idx+=1

print(nparray1)

或者可选地,通过使用X1MON1X:

nparray1 = numpy.array([1, 1, 0, 0, 1])
nparray2 = iter(numpy.array([8,7,4]))

for i in range(len(nparray1)):
    if nparray1[i]== 1:
        nparray1[i] = next(nparray2)

print(nparray1)

相关问题