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

2024-03-29 13:17:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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)

有人能帮我理解吗


Tags: 项目代码错误taug4g1g2coll
3条回答

我假设你得到的错误是因为你所有的数组都是二维的。我建议您尝试使用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))

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

tau*(g1+g2-g3+g4)

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

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]

或者,如果它不起作用:

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]

但是在做任何事情之前,你应该了解你输入的内容(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)

试着打印里面的值

print(tau*(g1+g2-g3+g4))

下面的方法可能也适用

mask = (obstacle == 0)
new_array = tau*(g1+g2-g3+g4)
g1_coll[mask]= new_array[mask]

注意最后一个[mask]

相关问题 更多 >