我有 2 個向量,我想計算一個矩陣,其中第 i 行是第一個向量,與第二個向量的第 i 個元素相比。這段代碼是這樣做的:
a1 = np.array([1, 2, 3])
a2 = np.array([1, 2, 3])
print(np.array([a1 > e for e in a2]))
我們得到:
[[False True True]
[False False True]
[False False False]]
我想擁有相同的行為,但使用“numpy magic”高效完成。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
您可以通過使陣列之一具有一個單一維度來廣播該函式:
In [1]: import numpy as np
In [2]: a1 = np.array([1, 2, 3])
...: a2 = np.array([1, 2, 3])[:,None]
In [3]: a1>a2
Out[3]:
array([[False, True, True],
[False, False, True],
[False, False, False]])
uj5u.com熱心網友回復:
的np.meshgrid(參見檔案)是用于構建2- d陣列,其中每兩個一維矢量的跨越其他的元素的數量廣播有用。如果陣列具有不同的元素和大小,可能更容易看到發生了什么:
>>> a1 = np.array([1,5,7])
>>> a2 = np.array([2,3,4,5])
>>> a1_2d, a2_2d = np.meshgrid(a1, a2)
>>> a1_2d
array([[1, 5, 7],
[1, 5, 7],
[1, 5, 7],
[1, 5, 7]])
>>> a2_2d
array([[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5]])
請注意,這兩個向量已在不同維度上廣播。
然后可以使用>運算子逐個比較它們以給出布爾陣列。
>>> a1_2d > a2_2d
array([[False, True, True],
[False, True, True],
[False, True, True],
[False, False, True]])
或者回到你的原始向量,這給出:
array([[False, True, True],
[False, False, True],
[False, False, False]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325920.html
