Python 错误,“NumPy 布尔数组索引分配需要 0 或 1 维输入,输入有 2 维”

jsp*_*jsp 6 python numpy

我对 python 有点陌生,目前正在开发一个项目,并在这行代码中遇到此错误。

    g1_coll[obstacle==0]=tau*(g1+g2-g3+g4)
    g2_coll[obstacle==0]=tau*(g1+g2+g3-g4)
    g3_coll[obstacle==0]=tau*(-g1+g2+g3+g4)
    g4_coll[obstacle==0]=tau*(g1-g2+g3+g4)
Run Code Online (Sandbox Code Playgroud)

谁能帮助我理解这一点?

mel*_*des 9

我假设您收到的错误是因为所有数组都是二维的。我建议你尝试使用numpy.putmask(matrix, mask, new_matrix_values)

例如

    mask = (obstacle == 0)
    numpy.putmask(g1_coll, mask, tau*(g1+g2-g3+g4))
    numpy.putmask(g2_coll, mask, tau*(g1+g2+g3-g4))
    numpy.putmask(g3_coll, mask, tau*(-g1+g2+g3+g4))
    numpy.putmask(g4_coll, mask, tau*(g1-g2+g3+g4))
Run Code Online (Sandbox Code Playgroud)


Nik*_*ido 0

问题是您使用掩码分配的内容。不知道 g1、g2、g3 和 g4 里面有什么,很难理解你在做什么,但可能

tau*(g1+g2-g3+g4)
Run Code Online (Sandbox Code Playgroud)

是二维向量。相反,您需要分配一个值。例如,如果您以这种方式更改分配,它可能会起作用:

g1_coll[obstacle==0]=(tau*(g1+g2-g3+g4))[0]
g2_coll[obstacle==0]=(tau*(g1+g2+g3-g4))[0]
g3_coll[obstacle==0]=(tau*(-g1+g2+g3+g4))[0]
g4_coll[obstacle==0]=(tau*(g1-g2+g3+g4))[0]
Run Code Online (Sandbox Code Playgroud)

或者,如果它不起作用:

g1_coll[obstacle==0]=(tau*(g1+g2-g3+g4))[0][0]
g2_coll[obstacle==0]=(tau*(g1+g2+g3-g4))[0][0]
g3_coll[obstacle==0]=(tau*(-g1+g2+g3+g4))[0][0]
g4_coll[obstacle==0]=(tau*(g1-g2+g3+g4))[0][0]
Run Code Online (Sandbox Code Playgroud)

但在执行任何操作之前,您应该了解输入内容 ( tau*(g1+g2-g3+g4))。

我的猜测是 g1、g2、g3 和 g4 可能是二维向量

通过这个例子我可以重现你的错误:

import numpy as np
import random


my_matrix = np.random.rand(4)
print(my_matrix)

my_boolean_array = my_matrix < 0.5
print(my_boolean_array)

my_matrix[my_boolean_array] = [[0, 0]] # two dimensions array! not a single value. This will not work
print(my_matrix)
Run Code Online (Sandbox Code Playgroud)

尝试打印里面的值

print(tau*(g1+g2-g3+g4))
Run Code Online (Sandbox Code Playgroud)