首页 > 解决方案 > 如何获取满足特定条件的列表值?

问题描述

我是 Python 的入门成员。我正在实现代码以使用 Python 组织数据。我必须从众多列表中提取一个仅满足某些条件的值。看起来很简单,但对我来说感觉太难了。

首先,让我用最简单的例子来解释

solutions
Out[73]: 
array([[ 2.31350622e-04, -1.42539948e-02, -7.17361833e-02,
         2.17545418e-01, -3.38251827e-01,  1.88254191e-01],
       [ 4.23523963e-82, -9.48255372e-81,  5.22018863e-80,
        -1.11271010e-79,  1.03507672e-79, -3.55573390e-80],
       [ 2.31350597e-04, -1.42539951e-02, -7.17361800e-02,
         2.17545409e-01, -3.38251817e-01,  1.88254187e-01],
       [ 2.58309722e-02, -6.21550000e-01,  3.41867505e+00,
        -7.53828444e+00,  7.09091365e+00, -2.39409614e+00],
       [ 2.31350606e-04, -1.42539950e-02, -7.17361809e-02,
         2.17545411e-01, -3.38251820e-01,  1.88254188e-01],
       [ 1.14525725e-02, -3.25174709e-01,  2.11632584e+00,
        -5.16113713e+00,  5.12508331e+00, -1.78380602e+00],
       [ 9.75839726e-03, -3.08729919e-01,  2.26983591e+00,
        -6.16462170e+00,  6.76409438e+00, -2.55992476e+00],
       [ 1.13190092e-03, -6.72042220e-02,  7.10413638e-01,
        -2.39952623e+00,  2.94849402e+00, -1.18046338e+00],
       [ 5.24406689e-03, -1.86240596e-01,  1.36500589e+00,
        -3.61106144e+00,  3.75606312e+00, -1.34699295e+00]])

coeff
Out[74]: 
array([[ 1.03177808e-04, -6.35700011e-03, -3.19929208e-02,
         9.70209594e-02, -1.50853634e-01,  8.39576506e-02,
         4.45980248e-01],
       [ 5.13911499e-83, -1.15062991e-81,  6.33426960e-81,
        -1.35018220e-80,  1.25598048e-80, -4.31459067e-81,
         1.21341776e-01],
       [ 1.03177797e-04, -6.35700027e-03, -3.19929194e-02,
         9.70209556e-02, -1.50853630e-01,  8.39576490e-02,
         4.45980249e-01],
       [ 4.26209161e-03, -1.02555298e-01,  5.64078896e-01,
        -1.24381145e+00,  1.16999559e+00, -3.95024121e-01,
         1.64999272e-01],
       [ 1.03177801e-04, -6.35700023e-03, -3.19929198e-02,
         9.70209566e-02, -1.50853631e-01,  8.39576495e-02,
         4.45980248e-01],
       [ 2.27512838e-03, -6.45980810e-02,  4.20421959e-01,
        -1.02529362e+00,  1.01813129e+00, -3.54364724e-01,
         1.98656535e-01],
       [ 1.42058482e-03, -4.49435521e-02,  3.30432790e-01,
        -8.97418681e-01,  9.84687293e-01, -3.72662657e-01,
         1.45575629e-01],
       [ 2.46722650e-04, -1.46486353e-02,  1.54850246e-01,
        -5.23029411e-01,  6.42688990e-01, -2.57307904e-01,
         2.17971950e-01],
       [ 1.30617191e-03, -4.63880878e-02,  3.39990392e-01,
        -8.99429225e-01,  9.35545685e-01, -3.35503798e-01,
         2.49076135e-01]])

在一个定义为'numpy'的矩阵中,称为'solutions',每一行代表'solutions[0]','solutions[1]','solutions[i]'......另外,'coeff'也被定义了作为'numpy','coeff[0]','coeff[1]','coeff[i]'...匹配到'solutions[0]','solutions[1]','solutions[一世]'...

我现在想要的是找到特定的 'solution[i]' 和 'coeff[i]' 其中解决方案 [i] 的所有元素都小于 10^-10 并且 coeff[i] 的所有元素都大于 10 ^-3。

我想知道在满足多个条件的情况下是否有合适的代码来提取列表数组。我是 Python 发起人,请见谅。

标签: arrayslistnumpyif-statementconditional-statements

解决方案


这可以使用高级索引来完成:

solution_valid = np.all(solutions < 10e-10, axis=1)
coeff_valid = np.all(coeff > 1e-3, axis=1)
both_valid = coeff_valid & solution_valid

valid_solutions = solutions[both_valid]
valid_coeffs = coeff[both_valid]

但也许您的意思是绝对值应该大于或低于某个阈值?

solution_valid = np.all(np.abs(solutions) < 10e-10, axis=1)
coeff_valid = np.all(np.abs(coeff) > 1e-3, axis=1)
both_valid = coeff_valid & solution_valid

valid_solutions = solutions[both_valid]
valid_coeffs = coeff[both_valid]

推荐阅读