我是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)有人能帮我理解这个吗?
发布于 2020-04-29 01:07:13
我假设你得到的错误是因为你所有的数组都是二维的。我建议您尝试使用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))发布于 2020-02-06 00:00:20
问题在于您使用掩码分配的内容。由于不知道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))发布于 2021-05-06 16:14:14
下面的代码可能也可以用
mask = (obstacle == 0)
new_array = tau*(g1+g2-g3+g4)
g1_coll[mask]= new_array[mask]注意最后一个[mask]
https://stackoverflow.com/questions/60079094
复制相似问题