【问题标题】:Operation between two 2D numpy array两个 2D numpy 数组之间的操作
【发布时间】:2023-03-19 18:15:02
【问题描述】:

我正在尝试对两个 2D numpy 数组进行操作,这样我的第一个 numpy 数组的每一行都对第二个 numpy 数组的所有行进行操作。

数组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

预期的输出应该像第一个包含以下操作结果的列表:

[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]]

【问题讨论】:

    标签: python python-3.x numpy numpy-ndarray array-broadcasting


    【解决方案1】:

    IIUC,您想计算test 的每一行与train 的每一行之间的距离。那是distance_matrix

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

    输出:

    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)
    

    输出:

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

    【讨论】:

    • 感谢您的回复,实际上我正在尝试从头开始实现 KNN。所以它必须是 numpy 或基本的 python。
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2019-09-11
    • 2011-06-19
    • 2022-01-09
    相关资源
    最近更新 更多