我有一组pts
形成循环的点,它看起来像这样:
这有点类似于31243002,但是我不想在点对之间放置点,而是想在点之间插入一条平滑的曲线(坐标在问题的末尾给出),所以我尝试了类似于Interpolation的scipy
文档.:
values = pts
tck = interpolate.splrep(values[:,0], values[:,1], s=1)
xnew = np.arange(2,7,0.01)
ynew = interpolate.splev(xnew, tck, der=0)
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
ValueError:输入数据错误
有没有办法找到这样的合适?
点数的坐标:
pts = array([[ 6.55525 , 3.05472 ],
[ 6.17284 , 2.802609],
[ 5.53946 , 2.649209],
[ 4.93053 , 2.444444],
[ 4.32544 , 2.318749],
[ 3.90982 , 2.2875 ],
[ 3.51294 , 2.221875],
[ 3.09107 , 2.29375 ],
[ 2.64013 , 2.4375 ],
[ 2.275444, 2.653124],
[ 2.137945, 3.26562 ],
[ 2.15982 …
Run Code Online (Sandbox Code Playgroud) 我有一个整数的numpy
数组x
(有(n,4)
形状),如:
[[0 1 2 3],
[1 2 7 9],
[2 1 5 2],
...]
Run Code Online (Sandbox Code Playgroud)
我想将数组转换为一对数组:
[0,1]
[0,2]
[0,3]
[1,2]
...
Run Code Online (Sandbox Code Playgroud)
所以第一个元素与同一个子数组中的其他元素成对.我已经有了一个for-loop
解决方案:
y=np.array([[x[j,0],x[j,i]] for i in range(1,4) for j in range(0,n)],dtype=int)
Run Code Online (Sandbox Code Playgroud)
但由于在numpy数组上循环效率不高,我尝试slicing
了解决方案.我可以为每列进行切片:
y[1]=np.array([x[:,0],x[:,1]]).T
# [[0,1],[1,2],[2,1],...]
Run Code Online (Sandbox Code Playgroud)
我可以为所有列重复此操作.我的问题是:
y[2]
到y[1]
...使得形状是(N,2)
?4
),我怎样才能找到y[i]
优雅的?我的目标是使用布尔掩码从DataFrame获取有用的列.
我尝试这样的代码片段:
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [101, 101, 102, 101, 102], 'c': [23, 12, 54, 65, 21]})
mask = [True, False, True]
df.columns[mask]
Run Code Online (Sandbox Code Playgroud)
结果就是我真正需要的:
Index([u'a', u'c'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
然后我尝试相同的代码,但使用另一个掩码:
mask_i = [1, 0, 1]
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [101, 101, 102, 101, 102], 'c': [23, 12, 54, 65, 21]})
mask_i = [1, 0, 1]
df.columns[mask]
Run Code Online (Sandbox Code Playgroud)
我期望相同的结果,但得到所有索引:
Index([u'b', u'a', u'b'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
然后我检查:
mask_i = [1, 0, 1]
mask = [True, False, True]
print mask == mask_i`
# Result: `True`
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么面具是平等但我得到不同的结果.