为什么此代码在for循环中仅使用x而不是x和y?

时间:2019-03-05 20:02:47

标签: python numpy numpy-random

为什么他们只在循环中使用X,而不同时在X和Y中使用X?为什么我们要使用1,-1进行整形?

# implement a loop which computes Euclidean distances between each element in X and Y
# store results in euclidean_distances_vector_l list
X = np.random.uniform( low=lower_boundary, high=upper_boundary, size=(sample_size, n) )
Y = np.random.uniform( low=lower_boundary, high=upper_boundary, size=(sample_size, n) )

for index, x in enumerate(X):
    euclidean_distances_vector_l.append(euclidean_distances(x.reshape(1, -1), Y[index].reshape(1, -1)))

2 个答案:

答案 0 :(得分:0)

我没用过很多numpy,但这是您对问题的最佳猜测。

代码仅迭代X而不是XY的原因是因为代码没有将X的每个值与{的每个值配对{1}}。相反,它希望Y中的每个值以及X中的对应值。考虑以下示例:

Y

就您对X = [0, 1, 2, 3, 4] Y = [5, 6, 7, 8, 9] for index, x in enumerate(X): print(x, Y[index]) # Prints: # 0 5 # 1 6 # 2 7 # 3 8 # 4 9 的疑问而言,documentation指出,任何参数中的值-1都表示应从原始数组的长度推断出该维的长度。然后,我的猜测是reshape会将x.reshape(1, -1)重组为一个二维数组,其中第一个维度的长度为1,第二个维度的长度为保持其中所有值所需的长度x

x

答案 1 :(得分:0)

在没有经过仔细测试的情况下,我认为xy zip也可以正常工作:

for x,y in zip(X,Y):
    euclidean_distances_vector_l.append(euclidean_distances(x.reshape(1, -1), y.reshape(1, -1)))