当我在 Pandas 中使用插值(或fillna,或任何其他生成一些假数据的方法)时,我希望它显示在我的图中。理想情况下,我想对图中的这些点使用不同的标记。对于常规点,我想使用实心圆圈 ( 'o'),对于假数据,我想使用十字 ( 'x')。
当然,我想用一个漂亮的Pythonic oneliner来做到这一点。
另一个复杂之处是我想使用subplots绘图函数中的选项来一次绘制所有列。我希望用 Matplotlib voodoo 操作子图是没有必要的,尽管目前这是我能想到的唯一选择。
我正在使用的数据如下所示(放入文件“meterstanden.ssv”中):
datum tijd gas[m^3] electra1[kWh] electra2[kWh] water[m^3]
2015-03-06 09:00 4000.318 10300 9000 300.0
2015-03-24 20:10 4020.220 - 10003 -
2015-08-02 11:15 4120.388 10500 11000 350.5
Run Code Online (Sandbox Code Playgroud)
这是我用来处理它的脚本:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_table("meterstanden.ssv", delim_whitespace=True,
parse_dates=[[0, 1]], index_col=0, na_values=['-'])
df.interpolate(method='time').plot(subplots=True, layout=(2, 2),
figsize=(14, 10), marker='o')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我希望-表中的条目用十字标记绘制。
我有一些过早优化的心情,并想知道以下内容.
如果有一个for循环,并且在该循环内部有一个函数的调用,该函数返回一个容器,比如一个向量,其值使用移动语义作为rvalue捕获到循环中的变量中,例如:
std::vector<any_type> function(int i)
{
std::vector<any_type> output(3);
output[0] = i;
output[1] = i*2;
output[2] = i-3;
return(output);
}
int main()
{
for (int i = 0; i < 10; ++i)
{
// stuff
auto value = function(i);
// do stuff with value ...
// ... but in such a way that it can be discarded in the next iteration
}
}
Run Code Online (Sandbox Code Playgroud)
在应用移动语义的情况下,编译器如何处理这种内存(并且该函数不会被内联)?我认为最有效的方法是为函数内部和for循环外部的所有值分配单个内存,这将在每次迭代中被覆盖.
我主要对此感兴趣,因为在我的实际应用程序中,我创建的向量比这里给出的示例大很多.我担心如果我使用这样的函数,分配和销毁过程将占用大量无用的时间,因为我已经知道我将多次使用固定数量的内存.所以,我实际上要问的是,编译器是否有某种方式可以优化到这种形式:
void function(int i, std::vector<any_type> &output)
{
// fill output
}
int main()
{
std::vector<any_type> dummy; // …Run Code Online (Sandbox Code Playgroud)