我有 2 個 NumPy 陣列,如下所示
array_1 = np.array([1.2, 2.3, -1.0, -0.5])
array_2 = np.array([-0.5, 1.3, 2.5, -0.9])
np我們可以使用不同的函式輕松地進行逐元素的簡單算術計算(加法、減法、除法等)
array_sum = np.add(array_1, array_2)
print(array_sum) # [ 0.7 3.6 3.5 -0.4]
array_sign = np.sign(array_1 * array_2)
print(array_sign) # [-1. 1. 1. -1.]
但是,我需要按元素檢查multiple conditions2 個陣列,并希望將它們保存在 2 個新陣列中(比如X和Y)。
例如,如果兩個元素都包含different sign(例如:給定示例的第 1 個和第 3 個元素對))那么,X將包含0并且Y將sum是poitive element和abs(negative element)
X = [0]
Y = [1.7]
當both元素是positive(例如:給定示例的第二個元素對)時,X將包含lower value并且Y將包含greater value
X = [1.3]
Y = [2.3]
如果兩個元素都是negative,那么,X 將是0并且Y將sum是abs(negative element)和abs(negative element)
所以,最后的X和Y會是這樣的
X = [0, 1.3, 0, 0]
Y = [1.7, 2.3, 3.5, 1.4]
我瀏覽了一些帖子(this和this),這些帖子描述了 2 個陣列之間的比較程序,但對多個條件沒有了解。在這里,2 個陣列非常小,但我的真實陣列非常大(例如:2097152每個陣列包含元素)。
任何想法都受到高度贊賞。
uj5u.com熱心網友回復:
嘗試numpy.select:
conditions = [(array_1>0)&(array_2>0), (array_1<0)&(array_2<0)]
choiceX = [np.minimum(array_1, array_2), np.zeros(len(array_1))]
choiceY = [np.maximum(array_1, array_2), -np.add(array_1,array_2)]
X = np.select(conditions, choiceX)
Y = np.select(conditions, choiceY, np.add(np.abs(array_1), np.abs(array_2)))
>>> X
array([0. , 1.3, 0. , 0. ])
>>> Y
array([1.7, 2.3, 3.5, 1.4])
uj5u.com熱心網友回復:
這會做到的。它確實需要垂直堆疊兩個陣列。如果有更有效的解決方案,我相信有人會提出來。
import numpy as np
array_1 = np.array([1.2, 2.3, -1.0, -0.5])
array_2 = np.array([-0.5, 1.3, 2.5, -0.9])
def pick(t):
if t[0] < 0 or t[1] < 0:
return (0,abs(t[0]) abs(t[1]))
return (t.min(), t.max())
print( np.apply_along_axis( pick, 0, np.vstack((array_1,array_2))))
輸出:
[[0. 1.3 0. 0. ]
[1.7 2.3 3.5 1.4]]
函式的第二行也可以寫成:
return (0,np.abs(t).sum())
但由于這些只是二元素陣列,我懷疑這是否能節省任何東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440668.html
標籤:Python 数组 python-3.x 麻木的
