我在python中有两个非常简单的函数,它们根据你想要存储的数字范围来计算结构的大小(C struct,numpy struct等)。因此,如果您想存储0到8389798之间的数字,则8389798将是您为该函数提供的值:
def ss(value):
nbits = 8
while value > 2**nbits:
nbits += 8
return nbits * value
def mss(value):
total_size = 0
max_bits = [(0,0)] # (bits for 1 row in struct, max rows in struct)
while value > 2 ** max_bits[-1][0] :
total_size += max_bits[-1][0] * max_bits[-1][1]
value -= max_bits[-1][1]
new_struct_bits = max_bits[-1][0]+8
max_bits.append( (new_struct_bits,2**new_struct_bits) )
total_size += max_bits[-1][0] * value
#print max_bits
return total_size
ss是针对单个结构的,您需要在第一行中存储尽可能多的字节来存储" 1"就像你在最后一行存储" 8389798"一样。但是,这并不像将结构分解为1字节,2字节,3字节等的结构那样节省空间,直到存储值所需的N个字节为止。这就是mss计算的。
所以现在我想看看,对于一系列值,mss比ss更有效率 - 范围是1到1000亿。保存和绘制的数据非常多,而且首先完全没必要这样做。更好地采用绘图窗口,并且对于在该窗口中具有像素的X的每个值,计算y的值[其为ss(x) - mss(x)]。
这种互动图形实际上是我能想到的唯一方式来看待mss和ss之间的关系。有谁知道我应该如何绘制这样的图表?我愿意使用JavaScript解决方案,因为我可以将python重写为该解决方案,以及使用"解决方案"比如Excel,R,Wolfram,如果它们提供了一种交互/生成图形的方法。