簡體   English   中英

兩個二維 numpy 陣列之間的操作

[英]Operation between two 2D numpy array

I am trying to operate on two 2D numpy arrays, such that my first numpy array's each row operate on all of the rows of second numpy array.

陣列1

test[] = [[0.54131721 0.52305685 0.42921551, 0.37434461 0.52591475 0.36184407]
 [0.53091097 0.3000469  0.39346106, 0.29261769 0.3806552  0.33904193]
 [0.29331853 0.44518117 0.41390863, 0.2510257  0.50481932 0.43607184]]

數組2

train[] =[[0.5301304,  0.62645837, 0.44524917, 0.40806674 0.46013734 0.61033772]
 [0.43333892 0.46062429 0.56937923, 0.6451305  0.33103777 0.35859095]
 [0.60879428 0.72451976 0.2661216, 0.38850336 0.41685737 0.57226228]]

這就是我保存兩個數組的方式:

import numpy as np
trainingData = np.genfromtxt('trainingData.csv', delimiter=',')
inTraining = trainingData[:, :-1]
print(inTraining)
testData = np.genfromtxt('testData.csv', delimiter=',')
inTest = testData[:, :-1]
print(inTest)

這是我嘗試過的,似乎還沒有接近:

def euclideanDistance( c1, c2):
        d1 = inTraining[]
        d2 = inTest[]
        a = math.sqrt( (d1[0]-d2[0])**2 + (d1[1]-d2[1])**2 )
        print(a)
        return a

預期的 output 應該類似於包含以下操作結果的第一個列表:

[0.54131721 0.52305685 0.42921551, 0.37434461 0.52591475 0.36184407] and [[0.5301304,  0.62645837, 0.44524917, 0.40806674 0.46013734 0.61033772]
 [0.43333892 0.46062429 0.56937923, 0.6451305  0.33103777 0.35859095]
 [0.60879428 0.72451976 0.2661216, 0.38850336 0.41685737 0.57226228]]

IIUC,您想計算每行test到每行train之間的距離。 那是distance_matrix

from scipy.spatial import distance_matrix
distance_matrix(test,train)

Output:

array([[0.27979822, 0.38277359, 0.35792442],
       [0.44997152, 0.43972939, 0.51706358],
       [0.3833412 , 0.48532177, 0.49455157]])

如果您只想要 numpy 代碼,您可以查看distance_matrix的代碼以了解發生了什么。 基本上,這是一個廣播動作:

def dist_mat(x,y):
    return np.sqrt(np.sum((x- y[:,None])**2, axis=-1))

dist_mat(train,test)

Output:

array([[0.27979822, 0.38277359, 0.35792442],
       [0.44997152, 0.43972939, 0.51706358],
       [0.3833412 , 0.48532177, 0.49455157]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM