我有一個尺寸爲(30x8100)
的矩陣X
和尺寸爲(1x8100)
的另一個Y
。我想生成一個包含它們之間差異的數組(X[1]-Y, X[2]-Y,..., X[30]-Y)
任何人都可以幫忙嗎?幾個圖像和一個基本圖像之間的歐幾里得距離
回答
所有你需要的是
X - Y
由於幾個人都提出,似乎試圖使形狀手動匹配的答案,我要解釋一下:
numpy的會自動展開Y
的形狀,因此它與X
相匹配。這被稱爲broadcasting,它通常在猜測應該做什麼方面做得非常好。在含糊的情況下,可以使用axis
關鍵字來告訴它做哪些事情。這裏,因爲Y
具有長度1的尺寸,所以這是擴展爲長度30
以與X
的形狀相匹配的軸。
例如,
In [87]: import numpy as np
In [88]: n, m = 3, 5
In [89]: x = np.arange(n*m).reshape(n,m)
In [90]: y = np.arange(m)[None,...]
In [91]: x.shape
Out[91]: (3, 5)
In [92]: y.shape
Out[92]: (1, 5)
In [93]: (x-y).shape
Out[93]: (3, 5)
In [106]: x
Out[106]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [107]: y
Out[107]: array([[0, 1, 2, 3, 4]])
In [108]: x-y
Out[108]:
array([[ 0, 0, 0, 0, 0],
[ 5, 5, 5, 5, 5],
[10, 10, 10, 10, 10]])
但是,這是不是一個真正的歐氏距離,爲您的標題似乎在暗示你想要的:
df = np.asarray(x - y) # the difference between the images
dst = np.sqrt(np.sum(df**2, axis=1)) # their euclidean distances
使用array
,爲了減去它使用numpy
廣播from Y
init矩陣:
>>> from numpy import *
>>> a = array([[1,2,3],[4,5,6]])
訪問第二排a
:
>>> a[1]
array([4, 5, 6])
減去陣列從Y
>>> Y = array([3,9,0])
>>> a - Y
array([[-2, -7, 3],
[ 1, -4, 6]])
a1 = numpy.array(X) #make sure you have a numpy array like [[1,2,3],[4,5,6],...]
a2 = numpy.array(Y) #make sure you have a 1d numpy array like [1,2,3,...]
a2 = [a2] * len(a1[0]) #make a2 as wide as a1
a2 = numpy.array(zip(*a2)) #transpose it (a2 is now same shape as a1)
print a1-a2 #idiomatic difference between a1 and a2 (or X and Y)
從numpy的陣列只是想迭代行,可以真正地減去他們和numpy的意志用不同的方式創造新的陣列!
import numpy as np
final_array = []
#X is a numpy array that is 30X8100 and Y is a numpy array that is 1X8100
for row in X:
output = row - Y
final_array.append(output)
輸出將是您所得X的陣列[0] - Y,X [1] - 等等Ÿ現在你final_array將與30個陣列內,每一個具有XY的值的數組你需要!就那麼簡單。只要確保你轉換你的矩陣先
編輯numpy的數組:由於numpy的廣播會做迭代,你需要的是一個線,一旦你有你的兩個數組:
final_array = X - Y
然後這是你的陣列與差異!
循環由[numpy broadcast]自動完成(http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)。 – askewchan
@askewchan哦,不知道......那簡直太簡單了,我做了編輯! –
- 1. 圖像相似性(直方圖匹配/歐幾里得距離)
- 2. 歐幾里得距離
- 3. 計算matlab中兩個圖像之間的歐幾里德距離
- 4. 用於測量圖像中像素之間歐幾里德距離的算法
- 5. 歐幾里德距離兩個像素,每個屬於不同的圖像
- 6. dplyr中的歐幾里得距離R
- 7. 歐幾里德距離c#
- 8. 歐幾里德距離點
- 9. 多維數組之間歐幾里得距離的numpy操作
- 10. 兩列向量之間的歐幾里得距離Matlab
- 11. MATLAB:向量化補丁之間的歐幾里得距離
- 12. 兩個向量之間的歐幾里得距離(單行矩陣)
- 13. numpy的:基於二維像素歐幾里得距離從中心
- 14. 計算多個歐幾里得距離的有效方法Matlab
- 15. 從歐幾里得距離轉換爲曼哈頓距離c#
- 16. 爲計算兩幅圖像之間的歐幾里得距離而優化性能
- 17. 矩陣與向量之間的歐幾里德距離
- 18. 稀疏向量中的歐幾里得距離與餘弦距離 - 歐幾里德如何表現更好?
- 19. 使用OpenCL的歐幾里德距離
- 20. csv文件的歐幾里德距離
- 21. 計算平方歐幾里德距離
- 22. 歐幾里德距離定義
- 23. 歐幾里德距離數學錯誤
- 24. 歐幾里德距離遞歸函數
- 25. 瞭解歸一化的歐幾里得距離?
- 26. 查找兩個巨大CSR矩陣的行之間的歐幾里德距離
- 27. 使用CUDA計算矩陣的相應行之間的歐幾里得距離
- 28. 計算2個矩陣之間的歐幾里德距離在CUDA
- 29. 什麼是歐幾里得距離平方或距離平方和?
- 30. 一個點和幾個位置之間的距離
我得到'ValueError異常:輸入必須是一個方形陣列 ' – user2229953
@ user2229953哦,因爲你的'x'和'y'有型'matrix',使用'np.asarray'使平方會元 - 請參閱我的編輯。 – askewchan
謝謝!但結果是有線的! 'dst [11368.09117391 7238.28732897 5975。85568237 6516.33956578 4690.22604361 4727.27377993 5210.6757694 4917.37040654 4315.19124481 4351.2316.13923247 4003.55476258 4175.54212706 4102.91009999 4330.4599796 4184.70386037 4134.89623796 4162.12512307 3828.49532333 3930.67847956 3766.93023507 3666.34224248 4040.05576148 3848.65880709 3845.35577393 3869.77351631 3836.28039808 3801.06876888 3799.32736535 3646.77473834]' – user2229953