linspace总是包括最后一点?

时间:2013-11-05 13:35:19

标签: python arrays numpy

对于平面中任意一对2D点,我想将连接向量分解为由精度因子指定的零件。但是我希望它始终包含起点和终点。作为一个额外的功能,我期待从向量的末尾到开头的分段将从头到尾给我相同的分段(当然在翻转之后)。正如我所看到的,numpy.linspace自然地满足了这个条件,除了那些情况 精度太大,只有一点。是否有任何内置函数来处理这种情况或任何提示,我将能够纠正这种行为?

import numpy as np
alpha = np.array([0,0])
beta = np.array([1,1])
alpha_beta_dist = np.linalg.norm(beta - alpha)
for i in range(10):
    precision = np.random.random(1)
    traversal = np.linspace(0.0, 1.0, num = alpha_beta_dist / float(precision))
    traversal2 = np.fliplr([np.linspace(1.0, 0.0, num = alpha_beta_dist / float(precision))])
    traversal2 = traversal2[0]
    if (traversal != traversal2).all():
        print 'precision: ', precision
        print 'taversal: ', traversal
        print 'taversal2: ', traversal2[0]

1 个答案:

答案 0 :(得分:4)

确保num至少为2:

traversal = np.linspace(0.0, 1.0,
                        num=max(alpha_beta_dist/float(precision), 2))

除非np.linspace小于2,否则

num将返回两个端点(默认情况下):

In [23]: np.linspace(0, 1, num=0)
Out[23]: array([], dtype=float64)

In [24]: np.linspace(0, 1, num=1)
Out[24]: array([ 0.])

In [25]: np.linspace(0, 1, num=2)
Out[25]: array([ 0.,  1.])