两个二维numpy数组之间的操作
Operation between two 2D numpy array
我正在尝试对两个二维 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]]
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]])
我正在尝试对两个二维 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]]
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]])