【问题标题】:I have two arrays and I need to do a simple operation in one array depending on conditions of the other array我有两个数组,我需要根据另一个数组的条件在一个数组中做一个简单的操作
【发布时间】:2020-10-19 18:21:21
【问题描述】:

我有两个数组 RM。在第一个数组R.shape = (10,7) 中,每一行对应一个对象的状态,每一列是对象在时间上的演变(每个对象在 7 个时间段内)。第二个数组M是每个对象的特征('C', 'SC','HS','HSDO')

R = np.ones((10,7))

  [[1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 1.]]

M = ['C', 'C', 'HS', 'C', 'C', 'SC', 'SC', 'HSDO', 'HSDO', 'HSDO']

我想知道如何修改数组R,以便我可以根据M 分配的特征向该行添加一个x 值?

例如:如果我要M=='C',则'C'对应的行加+0.5。

  [[1.5 1.5 1.5 1.5 1.5 1.5 1.5]
   [1.5 1.5 1.5 1.5 1.5 1.5 1.5]
   [ 1.  1.  1.  1.  1.  1.  1.]
   [1.5 1.5 1.5 1.5 1.5 1.5 1.5]
   [1.5 1.5 1.5 1.5 1.5 1.5 1.5]
   [ 1.  1.  1.  1.  1.  1.  1.]
   [ 1.  1.  1.  1.  1.  1.  1.]
   [ 1.  1.  1.  1.  1.  1.  1.]
   [ 1.  1.  1.  1.  1.  1.  1.]
   [ 1.  1.  1.  1.  1.  1.  1.]]

就像'SC' 加 0.7、'HS' 加 0.5 和 'HSDO' 加 0.3。

有没有简单的方法可以做到这一点?

【问题讨论】:

标签: python arrays numpy indexing


【解决方案1】:

我创建了一个字典,将每个字符串映射到要添加的值,然后循环通过M 将值添加到R

d = {'C':.5, 'SC':.7, 'HS':.5, 'HSDO':.3}

for i, val in enumerate(M):
    R[i] += d[val]

结果:

array([[1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5],
       [1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5],
       [1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5],
       [1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5],
       [1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5],
       [1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7],
       [1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7],
       [1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3],
       [1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3],
       [1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3]])

你也可以这样做:

R += np.array([d[m] for m in M])[:, None]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-06
    • 2019-04-09
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2018-07-28
    相关资源
    最近更新 更多