【问题标题】:Populate values in an array if conditions are true in another array in Python如果 Python 中另一个数组中的条件为真,则填充数组中的值
【发布时间】:2021-03-17 21:19:00
【问题描述】:

我已经创建了一个数组 d:

d = [[[1.60269836 1.97347391 1.76414466 1.53102548 1.35352821]
  [1.0153325  1.53331695 1.36105004 1.76111151 1.62595392]
  [1.5156144  1.77076004 1.24249056 1.94406171 1.98917422]]

 [[1.44790465 1.46990159 1.48156613 1.92963951 1.11459211]
  [1.10674091 1.57711027 1.85275685 1.84640848 1.34216641]
  [1.63670185 1.69894884 1.45114395 1.09750849 1.09564564]]]

有最大值、最小值和平均值:

Max value of d is: 1.98917422158341

Min value of d is: 1.0153325043494292

The mean of d is: 1.5377490722289062

我还创建了一个空数组 f:

f = np.empty((2,3,5))
f = [[[1.60269836 1.97347391 1.76414466 1.53102548 1.35352821]
  [1.0153325  1.53331695 1.36105004 1.76111151 1.62595392]
  [1.5156144  1.77076004 1.24249056 1.94406171 1.98917422]]

 [[1.44790465 1.46990159 1.48156613 1.92963951 1.11459211]
  [1.10674091 1.57711027 1.85275685 1.84640848 1.34216641]
  [1.63670185 1.69894884 1.45114395 1.09750849 1.09564564]]]

有了这一切,我需要检查 d 中的每个值并且:

  • 如果此 d 值大于 d_min 但小于 d_mean,则将 25 分配给 f 中的相应值。
  • 如果 d 中的某个值大于 d_mean 但小于 d_max,则将 75 分配给 f 中的对应值。
  • 如果值等于 d_mean,则将 50 分配给 f 中的相应值。
  • 为 d 中的 d_min 将 0 分配给 f 中的相应值。
  • 为 d 中的 d_max 分配 100 到 f 中的相应值。

最后,f 应该只有以下值:0、25、50、75 和 100。

到目前为止,我最好的解决方案是:

for value in d:
    if value.any() > d_min and value.any() < d_mean:
        value = 25
        value.append(f)

    if value.any() > d_mean and value.any() < d_max:
        value = 75
        value.append(f)

    if value.any() == d_mean:
        value = 50
        value.append(f)

    if value.any() == d_min:
        value = 0
        value.append(f)

    if value.any() == d_max:
        value = 100
        value.append(f)

我没有收到任何错误,但也没有收到我需要的结果。我刚开始学习 python 和 numpy,所以我确信它会有更好的方法来做到这一点,但是在阅读了文档并查找了许多示例之后,我没有得到解决方案。

【问题讨论】:

  • 添加 numpy 标签以获得更好的答案

标签: python arrays numpy for-loop if-statement


【解决方案1】:

这就是你要找的吗?

for i, value_i in enumerate(d):
    for j, value_j in enumerate(value_i):
        for index, value in enumerate(value_j):
            if value > d_min and value < d_mean:
                value = 25
                f[i][j][index] = value
        
            if value > d_mean and value < d_max:
                value = 75
                f[i][j][index] = value
        
            if value == d_mean:
                value = 50
                f[i][j][index] = value
        
            if value == d_min:
                value = 0
                f[i][j][index] = value
        
            if value == d_max:
                value = 100
                f[i][j][index] = value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多