AntonovAn225
Bull's-eye
2020-04-22 16:45
采纳率: 33.3%
浏览 3.2k

python(numpy)中,如何根据条件来修改某个矩阵中的值?

假设有一变量 x_1,x_1的值为[1:10]中的某一个。还有bay_1,bay_2,...bay_10.共10个矩阵。

我想让x_1=1时,对bay_1矩阵进行操作(更新数据),x_1=2时,对bay_2矩阵进行操作,其余同理。

下面代码是其中的一部分,以此举例。(python3.7)

    import numpy as np
    bay_7 = [[121, 7, 1, 1, 1], [122, 7, 2, 1, 1], [123, 7, 3, 1, 1], [124, 7, 4, 1, 1], [125, 7, 5, 1, 1], [126, 7, 1, 2, 0], [127, 7, 2, 2, 1],
         [128, 7, 3, 2, 1], [129, 7, 4, 2, 1], [130, 7, 5, 2, 1], [131, 7, 1, 3, 0], [132, 7, 2, 3, 1], [133, 7, 3, 3, 1], [134, 7, 4, 3, 1],
         [135, 7, 5, 3, 1], [136, 7, 1, 4, 0], [137, 7, 2, 4, 0], [138, 7, 3, 4, 1], [139, 7, 4, 4, 0], [140, 7, 5, 4, 0]]
    bay_7 = np.array(bay_7)
    x_1 = [133, 7, 3, 3, 0]

如果我用下面这行代码来对bay_7进行修改,倒是可行,

    bay_7[np.where(bay_7[:, 0]==x_1[0])]=x_1

其他的矩阵也可以用if,elif语句逐个进行判断,但是我想用eval这类的函数对它进行操作,就是为了简化代码。然后我自己写的eval代码如下:

    eval('bay_'+str(x_1[1])+'[np.where(bay_'+str(x_1[1])+'[:,0]==x_1[0])] = x_1')

然后他就提示我如下错误:

eval('bay_'+str(x_1[1])+'[np.where(bay_'+str(x_1[1])+'[:,0]==x_1[0])] = x_1')
File "", line 1
bay_7[np.where(bay_7[:,0]==x_1[0])] = x_1
^
SyntaxError: invalid syntax
请问,这种问题要怎么修改才可行?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • weixin_43490422
    little student 2020-04-22 20:03
    已采纳
    eval('bay_' + str(x_1[1]))[np.where(eval('bay_' + str(x_1[1]))[:, 0]==x_1[0])]=x_1
    
    点赞 评论

相关推荐