Jacobz

Jacobz 查看完整档案

北京编辑清华大学  |  车辆工程 编辑  |  填写所在公司/组织 jacobz.top 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

Jacobz 关注了用户 · 2018-02-04

LakeChan @stonemoe

关注 6

Jacobz 赞了回答 · 2018-02-04

解决基于.net框架3.5与4.0开发的程序无法兼容

在程序的同一个目录下放置一个<程序名字>.exe.config
内容如下

<configuration>
  <startup>
    <supportedRuntime version="v4.0" />
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

该config文件将被.NET Runtime读取并尝试向下兼容运行

当代码中没有包含3.5到4.0版本的升级中做了变更的函数,将可以完美兼容

关注 3 回答 2

Jacobz 关注了用户 · 2017-08-15

萝卜 @asterix314

     #####
    #### _\_  ________
    ##=-[.].]| \      \
    #(    _\ |  |------|
     #   __| |  ||||||||
      \  _/  |  ||||||||
   .--'--'-. |  | ____ |
  / __      `|__|[o__o]|
_(____nm_______ /____\____

关注 29

Jacobz 赞了回答 · 2017-08-15

算法求解,数组划分求各划分和中的最大值最小

保序问题

保持顺序的划分问题先找个简单的例子。比如把数列1,2,3,4,5,6划分成3组,则最后一组可能有1-4个元素:

  • [12345]6

  • [1234]56

  • [123]456

  • [12]3456

然后在这4种划分中选一个最优的(如果有并列最优则任取一个)即可。中括号[]里面是一个更小规模的问题(把数列划分成两组)。由此可总结出一个递归算法。

给定数列a[1], a[2], ... a[m],记A[i,j] = a[i], a[i+1], ... a[j]。函数groups(A[1,m],n)给出一个将数列划分成n组的最优划分。例如:

groups({1,2,3,4,5,6}, 3) = {{1, 2, 3}, {4, 5}, {6}}

递归公式为:

groups(A[1,m], 1) = {A[1,m]}
groups(A[1,m], n) = min {groups[A[1,i-1], n-1] + A[i,m]}, n <= i <= m

其中“+”表示将右边的数列作为最后的分组附加到左边的分组结果上,min是选出最优分组的操作(最大分组和最小)。

以下是Mathematica实现,缓存了中间结果(memoization)。

clipboard.png

测试:

clipboard.png

不保序问题

不保序的划分问题称为Multi-way partition problem,是NP-hard。 stackexchange上有个类似的问题和解答,参见这里

关注 6 回答 3

Jacobz 赞了文章 · 2017-08-12

Matplotlib绘图双纵坐标轴设置及控制设置时间格式

双y轴坐标轴图

今天利用matplotlib绘图,想要完成一个双坐标格式的图。

fig=plt.figure(figsize=(20,15))
ax1=fig.add_subplot(111)
ax1.plot(demo0719['TPS'],'b-',label='TPS',linewidth=2)
ax2=ax1.twinx()#这是双坐标关键一步
ax2.plot(demo0719['successRate']*100,'r-',label='successRate',linewidth=2)

横坐标设置时间间隔

import matplotlib.dates as mdate
ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d %H:%M:%S'))#设置时间标签显示格式
plt.xticks(pd.date_range(demo0719.index[0],demo0719.index[-1],freq='1min'))

纵坐标设置显示百分比

import matplotlib.ticker as mtick
fmt='%.2f%%'
yticks = mtick.FormatStrFormatter(fmt)
ax2.yaxis.set_major_formatter(yticks)

知识点

在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域。其逻辑关系如下:

一个Figure对应一张图片。

Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。1

Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。

add_subplot()

The Axes instance will be returned.

twinx()

ax = twinx()

create a twin of Axes for generating a plot with a sharex x-axis but independent y axis. The y-axis of self will have ticks on left and the returned axes will have ticks on the right.
意思就是,创建了一个独立的Y轴,共享了X轴。双坐标轴!

类似的还有twiny()

ax1.xaxis.set_major_formatter

Set the formatter of the major ticker
ACCEPTS: A Formatter instance

DateFormatter()

strftime方法(传入格式化字符串)。

strftime(dt, fmt=None)
Refer to documentation for datetime.strftime.
fmt is a strftime() format string.

FormatStrFormatter()

Use a new-style format string (as used by str.format()) to format the tick. The field formatting must be labeled x
定义字符串格式。

plt.xticks

# return locs, labels where locs is an array of tick locations and
# labels is an array of tick labels.
locs, labels = xticks()

# set the locations of the xticks
xticks( arange(6) )

# set the locations and labels of the xticks
xticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )

代码汇总

#coding:utf-8
import matplotlib.pyplot as plt 
import matplotlib as mpl
import matplotlib.dates as mdate
import matplotlib.ticker as mtick
import numpy as np
import pandas as pd
import os


mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
mpl.rc('xtick', labelsize=20) #设置坐标轴刻度显示大小
mpl.rc('ytick', labelsize=20) 
font_size=30
#matplotlib.rcParams.update({'font.size': 60})

%matplotlib inline
plt.style.use('ggplot')

data=pd.read_csv('simsendLogConvert_20160803094801.csv',index_col=0,encoding='gb2312',parse_dates=True)

columns_len=len(data.columns)
data_columns=data.columns

for x in range(0,columns_len,2):
    print('第{}列'.format(x))
    total=data.ix[:,x]
    print('第{}列'.format(x+1))
    successRate=(data.ix[:,x+1]/data.ix[:,x]).fillna(0)
    
    
    yLeftLabel=data_columns[x]
    yRightLable=data_columns[x+1]
    
    
    print('------------------开始绘制类型{}曲线图------------------'.format(data_columns[x]))
    
    fig=plt.figure(figsize=(25,20))
    ax1=fig.add_subplot(111)
    #绘制Total曲线图
    ax1.plot(total,color='#4A7EBB',label=yLeftLabel,linewidth=4)

    # 设置X轴的坐标刻度线显示间隔
    ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d %H:%M:%S'))#设置时间标签显示格式
    plt.xticks(pd.date_range(data.index[0],data.index[-1],freq='1min'))#时间间隔
    plt.xticks(rotation=90)
    
    #设置双坐标轴,右侧Y轴
    ax2=ax1.twinx()
    
    #设置右侧Y轴显示百分数
    fmt='%.2f%%'
    yticks = mtick.FormatStrFormatter(fmt)
    
    # 绘制成功率图像
    ax2.set_ylim(0,110)
    ax2.plot(successRate*100,color='#BE4B48',label=yRightLable,linewidth=4)
    ax2.yaxis.set_major_formatter(yticks)

    ax1.set_xlabel('Time',fontsize=font_size) 
    ax1.set_ylabel(yLeftLabel,fontsize=font_size)
    ax2.set_ylabel(yRightLable,fontsize=font_size)
    
    legend1=ax1.legend(loc=(.02,.94),fontsize=16,shadow=True)
    legend2=ax2.legend(loc=(.02,.9),fontsize=16,shadow=True)
    
    legend1.get_frame().set_facecolor('#FFFFFF')
    legend2.get_frame().set_facecolor('#FFFFFF')
    
    plt.title(yLeftLabel+'&'+yRightLable,fontsize=font_size)

    plt.savefig('D:\\JGT\\Work-YL\\01布置的任务\\04绘制曲线图和报告文件\\0803\\出图\\{}-{}'.format(yLeftLabel.replace(r'/',' '),yRightLable.replace(r'/',' ')),dpi=300)

参考


  1. Vami-绘图: matplotlib核心剖析
  2. Secondary axis with twinx(): how to add to legend?
查看原文

赞 6 收藏 8 评论 1

Jacobz 回答了问题 · 2017-08-06

解决pandas[]中的选择条件为什么使用&而不是and?

pandas的&是每一条数据均进行与运算(element-wise),得到的结果仍然是一个Series/DataFrame对象,这是通过重载__and__运算符实现的。

而重载and运算需要重载__nonzero__函数,默认情况下and运算代表的意义是整体进行与运算,因此运算的对象应该是单一的bool值。而报错的信息就是告诉你在pandas中整体的与运算是模糊(未定义的),具体可以使用.any().all()函数提取整体的bool值,这两个函数的用法与python内置的any()all()函数是相似的。

可以参见StackOverflow这个问题

关注 3 回答 2

Jacobz 回答了问题 · 2017-08-06

解决pip3 install Model 出错

哥们。。你只是拼错了吧。。。

关注 2 回答 2

Jacobz 回答了问题 · 2017-08-03

在一颗高度为h的m阶B数中关键字应该满足什么关系?

B树有两个参数是每一个结点最少和最多的子树数目。例如如果一颗B树每个结点最多有4个子树,最少有2个子树,那么这棵树就叫做2-4树。下图就是一个2-4树(即m=4),它是一个满树(每个结点都达到最多键数目)。

clipboard.png

每一个结点上,键一般是顺序存储的,而每两个键之间以及两端都会有指向下一层的指针,因此最大指针数会比最大的键数多1,而指针数即子树数目。

因此最大子树数=最大键数+1,至于为什么有这样的关系就需要对B树的平衡方式有所了解了,具体可以参见Wiki

关注 2 回答 1

认证与成就

  • 获得 12 次点赞
  • 获得 6 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 6 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-07-09
个人主页被 255 人浏览