0

start範囲値を指定してend数値のリストを生成する汎用アルゴリズムを探していますが、数値はゼロを通過する必要があります。. これが私の現在のコードです:

end = 78
start = -1 * end
step_size = 16
numbers = range(start, end+step_size, step_size)

$ numbers
Out[90]: [-78, -62, -46, -30, -14, 2, 18, 34, 50, 66, 82]

したがって、この特定のケースでは、各数値から 2 を減算して、数値にゼロ値が 1 つ含まれるようにします。しかし、どうすればこれをより一般的に行うことができますか? グラフの y-tic の位置を計算するためにこれを行っているため、一度ゼロを通過する必要があります。

4

2 に答える 2

4

start % step_size必要なオフセットである必要があります:

>>> end = 78
>>> start = -1 * end
>>> step_size = 16
>>> range(start-(start%step_size), end+step_size, step_size)
[-80, -64, -48, -32, -16, 0, 16, 32, 48, 64, 80]

例:

def get_range(end, step_size):
    start = -1 * end
    return range(start-(start%step_size), end+step_size, step_size)

>>> get_range(23, 4)
[-24, -20, -16, -12, -8, -4, 0, 4, 8, 12, 16, 20, 24]
>>> get_range(19, 11)
[-22, -11, 0, 11, 22]
>>> get_range(103, 32)
[-128, -96, -64, -32, 0, 32, 64, 96, 128]
于 2012-07-03T17:00:42.047 に答える
0

リストの絶対値の最小値を見つけ、それをリストの各要素から引きます。これは最適な解決策ではありませんが、迅速かつダーティであり、機能します。

(リストよりも効率的であるため、numpyを使用しました.matplotlibを使用している場合は、おそらくnumpyを使用しています)

>>> from numpy import *
>>> a = arange(-10, 20, 3)
>>> b = argmin([abs(_) for _ in a])
>>> a-=a[b]
>>> a
array([-9, -6, -3,  0,  3,  6,  9, 12, 15, 18])
于 2012-07-03T16:59:58.073 に答える