OPのように、linspace
の使用では、開始がすべての行で0とみなされます。
x=np.linspace(0,1,N)[:,None]*np.arange(0,2*N,2)
(編集 - これは私が取得すべきかの転置であり、それを移調や[:,None]
の使用を切り替えるのいずれか)N = 3000の場合
、それは@Divaker's
ソリューションよりも著しく高速です。なぜ私は完全にはわからない。
In [132]: timeit N=3000;x=np.linspace(0,1,N)[:,None]*np.arange(0,2*N,2)
10 loops, best of 3: 91.7 ms per loop
In [133]: timeit create_ranges(np.zeros(N),np.arange(0,2*N,2),N)
1 loop, best of 3: 197 ms per loop
In [134]: def foo(N):
...: D=np.ones((N,N))*np.arange(N)
...: D=D/D[:,-1]
...: W=np.arange(0,2*N,2)
...: return (D.T*W).T
...:
In [135]: timeit foo(3000)
1 loop, best of 3: 454 ms per loop
============私が使用することができますが開始され、停止して
:
In [201]: starts=np.array([1,4,2]); stops=np.array([6,7,8])
In [202]: x=(np.linspace(0,1,5)[:,None]*(stops-starts)+starts).T
In [203]: x
Out[203]:
array([[ 1. , 2.25, 3.5 , 4.75, 6. ],
[ 4. , 4.75, 5.5 , 6.25, 7. ],
[ 2. , 3.5 , 5. , 6.5 , 8. ]])
create_ranges
よりも、それは少し遅くなり、余分な計算と。
In [208]: timeit N=3000;starts=np.zeros(N);stops=np.arange(0,2*N,2);x=(np.linspace(0,1,N)[:,None]*(stops-starts)+starts).T
1 loop, best of 3: 227 ms per loop
すべてのこれらのソリューションは、単なるバリエーションstarts
とstops
間の線形補間を行うためのアイデアです。
もしあなたがpandasを使いたいならば、 '' pd.Series(W).apply(lambda e:np.linspace(0、e、3)) ' – Boud
基本的に2つのベクトル(行列の最初と最後の列) 、正しい?そして、あなたは各行のいくつかの値を補間したいと思うでしょう。 – Kartik
@dayumもし開始位置を変更したいのであれば同じアプローチですが、2つのベクトルの開始と停止でdfを構築し、lambda引き数をdf.start、df.end、3 – Boud