6 回答

TA貢獻1757條經驗 獲得超7個贊
讓我們嘗試一下outer
:
np.abs(np.subtract.outer(l3,l4)).ravel()
輸出:
array([1, 7, 6, 2, 7, 1])

TA貢獻1804條經驗 獲得超8個贊
問題
最有效地計算可迭代對象的笛卡爾積并減去結果的 Pythonic 方法。
解決方案
最簡單、最Pythonic的方法:
[?abs(i-j)?for?i,j?in?itertools.product(list1,?list2)?]
根據數據集的大小,您可能需要使用生成器表達式。
(?abs(i-j)?for?i,j?in?itertools.product(list1,?list2)?)
請注意,您不需要顯式定義 l1 和 l2,因為 itertools.product 采用可n
迭代對象。您可以簡單地執行以下操作:
l?=?[[1],?[3,4]] (?abs(i-j)?for?i,j?in?itertools.product(*l)?)

TA貢獻1817條經驗 獲得超6個贊
import itertools
def computedifference(list1,list2):
return [abs(i-j) for i,j in itertools.product(list1,list2)]
itertools.product 的文檔:https://docs.python.org/2/library/itertools.html#itertools.product

TA貢獻1772條經驗 獲得超5個贊
您可以使用numpy 廣播來向量化成對差異:
import numpy as np
l1, l2 = [1], [3,4]
l3, l4 = [2,7,8], [1,9]
def computedifference(list1, list2):
? ? l1 = np.array(list1)
? ? l2 = np.array(list2)
? ??
? ? return np.abs(l1[:,None] - l2).ravel().tolist()
computedifference(l1,l2)
[2, 3]
computedifference(l3,l4)
[1, 7, 6, 2, 7, 1]

TA貢獻1836條經驗 獲得超13個贊
l1 = [2,7,8]
l2 = [1,9]
def computedDiff(list1,list2):
return([abs(i-j) for i in list1 for j in list2])
print(computedDiff(l1,l2))
好吧,基本上我在這里所做的就是將其壓縮為一行,并且只是以列表形式返回整個 for 循環。只是一種更干凈的方法,因為它不包含任何其他變量或附加到列表。
添加回答
舉報