1

私は次元のマトリックスと別のX次元のマトリックスを持っています。それらの違いを含む配列を生成したいのですが、 誰か助けてもらえますか?(30x8100)Y(1x8100)(X[1]-Y, X[2]-Y,..., X[30]-Y)

4

4 に答える 4

3

そのために必要なのは

X - Y

何人かの人々が形状を手動で一致させようとしているように見える回答を提供したので、説明する必要があります: Numpy はの形状と一致するように の形状
を自動的に展開します。これはブロードキャストと呼ばれ、通常、何をすべきかを非常にうまく推測します。あいまいなケースでは、キーワードを適用して、物事を行う方向を伝えることができます。ここで、は長さ 1 の次元を持っているので、これは の形状に合わせて長さに拡張された軸です。YXaxisY30X

例えば、

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
于 2013-04-17T19:13:20.103 に答える
1

それを差し引くためにブロードキャストを使用arrayおよび使用しますnumpyY

マトリックスを初期化します。

>>> from numpy import *
>>> a = array([[1,2,3],[4,5,6]])

の 2 行目にアクセスするa:

>>> a[1]
array([4, 5, 6])

から配列を減算Y

>>> Y = array([3,9,0])
>>> a - Y

array([[-2, -7,  3],
       [ 1, -4,  6]])
于 2013-04-17T19:13:21.447 に答える
0
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)
于 2013-04-17T19:14:09.127 に答える