給定兩個陣列:
import numpy as np
array1 = np.array([7, 2, 4, 1, 20], dtype = "int")
array2 = np.array([2, 4, 4, 3, 10], dtype = "int")
并且不使用任何回圈或 if-else 陳述句;我正在嘗試創建第三個陣列,如果 array1 中的元素大于 array2 中的元素,則該陣列的值等于 array1 和 array2 中的(相應)元素之和。如果它們相等,則新元素的值應等于它們的乘積。如果array2中的元素更大,那么新元素應該是array2中的元素和array1中的元素之間的差異
我曾嘗試使用 python 串列和 if-else 回圈陳述句來實作這一點,但想知道如何使用 numpy 方法來實作。
我的實作:
array1 = [7, 2, 4, 1, 20]
array2 = [2, 4, 4, 3, 10]
array3 = []
for i, j in enumerate(array1):
if j>array2[i]:
sum = j array2[i]
array3.append(sum)
elif j==array2[i]:
product = j * array2[i]
array3.append(product)
else:
sub = array2[i] - j
array3.append(sub)
print("output: ",array3)
輸出:[9、2、16、2、30]
uj5u.com熱心網友回復:
你可以np.select在這里使用:
>>> import numpy as np
>>> array1 = np.array([7, 2, 4, 1, 20], dtype = "int")
>>> array2 = np.array([2, 4, 4, 3, 10], dtype = "int")
這是helpfor np.select:
select(condlist, choicelist, default=0)
Return an array drawn from elements in choicelist, depending on conditions.
Parameters
----------
condlist : list of bool ndarrays
The list of conditions which determine from which array in `choicelist`
the output elements are taken. When multiple conditions are satisfied,
the first one encountered in `condlist` is used.
choicelist : list of ndarrays
The list of arrays from which the output elements are taken. It has
to be of the same length as `condlist`.
default : scalar, optional
The element inserted in `output` when all conditions evaluate to False.
Returns
-------
output : ndarray
The output at position m is the m-th element of the array in
`choicelist` where the m-th element of the corresponding array in
`condlist` is True.
因此,適用于您的問題:
>>> np.select(
... [array1 > array2, array1 == array2, array1 < array2],
... [array1 array2, array1*array2, array2 - array1]
... )
array([ 9, 2, 16, 2, 30])
>>>
uj5u.com熱心網友回復:
您可以使用三個掩碼陣列,如下所示:
>>> array3 = np.zeros(array1.shape, dtype=array1.dtype)
>>> a1_gt = array1 > array2 # for when element at array 1 is greater
>>> a2_gt = array1 < array2 # for when element at array 2 is greater
>>> a1_eq_a2 = array1 == array2 # for when elements at array 1 and array 2 are equal
>>> array3[a1_gt] = array1[a1_gt] array2[a1_gt]
>>> array3[a2_gt] = array2[a2_gt] - array1[a2_gt]
>>> array3[a1_eq_a2] = array2[a1_eq_a2] * array1[a1_eq_a2]
>>> array3
array([ 9., 2., 16., 2., 30.])
uj5u.com熱心網友回復:
使用numpy.select默認值:
array1 = np.array([7, 2, 4, 1, 20], dtype = "int")
array2 = np.array([2, 4, 4, 3, 10], dtype = "int")
np.select([array1>array2, array1<array2],
[array1 array2, array2-array1],
default=array1*array2)
輸出:array([ 9, 2, 16, 2, 30])
uj5u.com熱心網友回復:
我將您的陣列重命名為aandb
print((a>b)*(a b) (a==b)*(a*b) (a<b)*(b-a))
陣列之間的直接比較為您提供布爾結果,您可以將其解釋為0or 1。這意味著一個簡單的乘法可以將一個元素“打開”或“關閉”。所以我們可以把所有東西拼湊起來。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410471.html
標籤:
