繁体   English   中英

在 Python 中使用数学符号比较数组元素

[英]Comparing array elements using mathematical symbols in Python

我有一个数组A 我正在比较A[i+1]=A[i]但当前输出以 0 和 1 表示。 相反,我希望它以< or = or >的形式给出。 我提出了预期的输出。

import numpy as np

A=np.array([np.array([[0.01609   , 0.01728839, 0.01635707],
              [0.01696908, 0.01661592, 0.0163007 ],
              [0.01609   , 0.01642818, 0.01950431]]),
       np.array([[[0.01609   , 0.01728839, 0.01635707],
               [0.01696908, 0.01661592, 0.0163007 ],
               [0.01609   , 0.01642818, 0.01950431]]]),
       np.array([[[0.01609   , 0.017286  , 0.01635698],
               [0.01698125, 0.01659415, 0.01630078],
               [0.01627952, 0.01639007, 0.01951677]]])], dtype=object)


for i in range(0,len(A)-1):
    B=(A[i+1]==A[i]).astype(int)
    print([B])

当前输出为

[array([[[1, 1, 1],
        [1, 1, 1],
        [1, 1, 1]]])]
[array([[[1, 0, 0],
        [0, 0, 0],
        [0, 0, 0]]])]

预期的输出是

[array([[=, =, =],
        [=, =, =],
        [=, =, =]]])]
[array([[[=, <, <],
        [>, <, >],
        [>, <, >]]])]

您可以使用numpy 广播np.select避免 for 循环:

mapping = {
    "<": A[1:] < A[:-1],
    "=": A[1:] == A[:-1],
    ">": A[1:] > A[:-1],
}

choicelist, condlist = zip(*mapping.items())

result = np.select(condlist, choicelist)

# equivalent to
# result = np.select(mapping.values(), mapping.keys())
>>> result
array([[['=', '=', '='],
        ['=', '=', '='],
        ['=', '=', '=']],

       [['=', '<', '<'],
        ['>', '<', '>'],
        ['>', '<', '>']]], dtype='<U3')

你可以使用np.select

for i in range(len(A)-1):
    B = np.select([A[i+1]==A[i],A[i+1]>A[i],A[i+1]<A[i]], ["=",">","<"])
    print([B])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM