我有两个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 ......
答案 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功能会快得多。