从两个大小相等的numpy数组中创建一个最小幅度值的数组

时间:2018-03-07 17:21:02

标签: python arrays python-3.x numpy

我有两个numpy数组:

import numpy as np
a=np.array([1,-2,3]) 
b=np.array([-2,-1,4])

我知道如何创建每对条目中最小值的数组:

np.minimum(a,b)
array([-2, -2,  3])

如何获得最小幅度值的绝对值数组

np.minimum(abs(a),abs(b))
array([1, 1, 3]) 

但我想要的是一个最小幅度值的数组,但保留了值的符号,换句话说就是

array([1,-1,3]) 

作为我的输出......我想不出一个python-esque的方式在一行中做这个,只采用冗长的循环和if-thens ......

2 个答案:

答案 0 :(得分:4)

CPU0 CPU1 CPU2 CPU3 0: 54 0 0 0 IO-APIC-edge timer 1: 10 0 0 0 IO-APIC-edge i8042 6: 2 0 0 0 IO-APIC-edge floppy 8: 1 0 0 0 IO-APIC-edge rtc0 9: 0 0 0 0 IO-APIC-fasteoi acpi 12: 16 0 0 0 IO-APIC-edge i8042 14: 0 0 0 0 IO-APIC-edge ata_piix 15: 3984107 0 0 0 IO-APIC-edge ata_piix 16: 2 0 0 0 IO-APIC-fasteoi vmwgfx 17: 980727 939643 1334876 770403 IO-APIC-fasteoi ioc0 24: 0 0 0 0 PCI-MSI-edge PCIe PME, pciehp 25: 0 0 0 0 PCI-MSI-edge PCIe PME, pciehp 26: 0 0 0 0 PCI-MSI-edge PCIe PME, pciehp 27: 0 0 0 0 PCI-MSI-edge PCIe PME, pciehp 28: 0 0 0 0 PCI-MSI-edge PCIe PME, pciehp 用作条件,将原始数组用作返回元素:

np.where

答案 1 :(得分:0)

使用np.where是最好的答案,但我刚刚使用python迭代计算出另一种解决方案:

np.array([a[i] if abs(a[i])<abs(b[i]) else b[i] for i in range(len(a))])

当然,np.where功能会快得多。