GVKun编程网logo

设置`axes.linewidth`而不更改`rcParams`全局字典

15

在这篇文章中,我们将带领您了解设置`axes.linewidth`而不更改`rcParams`全局字典的全貌,同时,我们还将为您介绍有关android.view.ViewGroup$LayoutPar

在这篇文章中,我们将带领您了解设置`axes.linewidth`而不更改`rcParams`全局字典的全貌,同时,我们还将为您介绍有关android.view.ViewGroup $LayoutParams不能被转换为android.widget.AbsListView $LayoutParams、Apache Kylin 4.0精确去重的全局字典原理、c – 使用MSGPACK_DEFINE而不更改类声明、c# – Xamarin.Forms WidthRequest值的意思的知识,以帮助您更好地理解这个主题。

本文目录一览:

设置`axes.linewidth`而不更改`rcParams`全局字典

设置`axes.linewidth`而不更改`rcParams`全局字典

因此,似乎无法执行以下操作(由于axes没有set_linewidth方法,因此会引发错误):

axes_style = {''linewidth'':5}axes_rect = [0.1, 0.1, 0.9, 0.9]axes(axes_rect, **axes_style)

并且必须使用以下旧技巧:

rcParams[''axes.linewidth''] = 5 # set the value globally... # some codercdefaults() # restore [global] defaults

有没有一种简单/干净的方法(也许可以单独设置x-和y-轴参数,等等)?

PS如果没有,为什么?

答案1

小编典典

上面的答案无效,如注释中所述。我建议使用刺。

import matplotlib.pyplot as pltfig = plt.figure()ax = fig.add_subplot(111)# you can change each line separately, like:#ax.spines[''right''].set_linewidth(0.5)# to change all, just write:for axis in [''top'',''bottom'',''left'',''right'']:  ax.spines[axis].set_linewidth(0.5)plt.show()# see more about spines at:#http://matplotlib.org/api/spines_api.html#http://matplotlib.org/examples/pylab_examples/multiple_yaxis_with_spines.html

android.view.ViewGroup $LayoutParams不能被转换为android.widget.AbsListView $LayoutParams

android.view.ViewGroup $LayoutParams不能被转换为android.widget.AbsListView $LayoutParams

我得到这个expcetion:
java.lang.classCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
at android.widget.ListView.setupChild(ListView.java:1806)
at android.widget.ListView.makeAndAddView(ListView.java:1775)
at android.widget.ListView.fillDown(ListView.java:672)
at android.widget.ListView.fillFromTop(ListView.java:732)
at android.widget.ListView.layoutChildren(ListView.java:1625)
at android.widget.AbsListView.onLayout(AbsListView.java:1863)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1617)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1401)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
at android.view.View.layout(View.java:11278)
at android.view.ViewGroup.layout(ViewGroup.java:4224)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1504)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2458)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

但问题是我找不到问题的根源.究竟在哪里呢?

为什么小部件,我没有任何小部件!

码:

不确定在这里:

public class MyListPreference extends ListPreference {

    public MyListPreference(Context context) {
        super(context);
    }

    public MyListPreference(Context context,AttributeSet attrs) {
        super(context,attrs);
    }

    @Override
    protected View onCreateDialogView() {
        TextView dialogTitle = (TextView)super.onCreateDialogView();

        if (dialogTitle != null) {
            // Dialog
            dialogTitle.setBackgroundColor(getContext().getResources().getColor(R.color.category_background));
            dialogTitle.setPadding(10,4,4);

            // Text
            dialogTitle.setTextSize(14);
            dialogTitle.setTypeface(null,Typeface.BOLD);
            dialogTitle.setTextColor(getContext().getResources().getColor(R.color.actionbar_background));

            dialogTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        }
        return dialogTitle;
    }
}

解决方法

dialogTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));

在这里,您正在使用更通用的ViewGroup.LayoutParams替换正确类型AbsListView.LayoutParams的现有布局参数.布局参数类型是视图的父容器的类型.

如果您需要修改现有的布局参数,请使用getLayoutParams()访问它们,修改它,并调用requestLayout()来通知布局已更改.

例.代替

fooView.setLayoutParams(new LayoutParams(123,456));

LayoutParams lp = fooView.getLayoutParams();
lp.width = 123;
lp.height = 456;
fooView.requestLayout();

Apache Kylin 4.0精确去重的全局字典原理

Apache Kylin 4.0精确去重的全局字典原理

全局字典讲解

为什么需要全局字典

在OLAP数据分析领域,去重计数(Count distinct)是非常常见的需求,而根据去重结果的要求又分为近似去重和精确去重。

在大规模数据集下,要想做到精确去重还要保证查询快速响应还是很有挑战性的。我们知道精确去重经常用到的处理方式就是位图法(Bit map)。对于整型数据,我们可以将统计信息保存在Bit map中,但是实际处理的数据中除了整型还会有String等其他类型,如果想做到精确去重首先就需要构建一个字典来为这些数据进行统一映射,然后再通过Bit map法进行统计。

我们都知道Kylin通过预计算技术来加速大数据分析。在增量构建Cube的时候,为了避免不同的segment单独构建字典导致最终去重结果出错,一个Cube中所有的Segment会使用同一个字典,也就是全局字典(Global Dictionary)。

全局字典的演变

Kylin从1.5.3版本就开始支持全局字典功能,但是这时的构建方式也具有明显的缺陷:

全局字典在Job Server上进行单点构建,随着数据增多构建时长变得不可控
随着数据积累,全局字典的构建对Kylin 构建节点的内存的需求会不断增多
受限于整型最大数量的限制
其实在Kylin3.1中已经加入了基于Hive的分布式全局字典构建,它已经解决了以上问题,详情可以查看Kylin分布式全局字典 。但是Kylin 4.0为了适应全新的构建查询引擎,基于spark实现了另外一种分布式构建全局字典的方式,今天我们就来详细描述一下Kylin 4.0的全局字典是如何实现的。

基于Spark的全局字典

Kylin 4.0构建全局字典的方式基于Spark进行分布式的编码处理,减小了单机节点的压力,构建字典数量能够突破整型最大数量的限制。

设计与原理

全局字典的结构

  • 每一次构建任务会生成一份新的全局字典
  • 每次新的构建任务的字典按版本号进行保存, 旧的全局字典会被逐渐删除
  • 一份字典包括一份meta数据文件和多个字典文件, 每个字典文件称之为桶(Bucket)
  • 每个桶分为两个映射( Map<Object, Long>), 两者合并为完整的映射关系

image
image

Bucket的概念与转化

Kylin引入了桶这一概念,可以理解为在处理数据的时候,将数据分到若干个桶(即多个分区)中进行并行处理。 第一次构建字典的时候会对每个桶内的值从1开始编码,在所有桶的编码完成之后再根据每个桶的offset值进行整体字典值的分配。在代码中两次编码是通过两个HashMap进行存储的,其中一个存储桶内相对的字典值,另一个存储所有桶之间绝对的字典值。

下图所示的是编号为1的桶多次构建任务中,桶内字典的传递,每一次构建都会为桶创建一个新的版本(即v1, v2, v3等),加入版本控制的原因后面会有解释。Curr(current)和Prev(Previous)是一个桶内的两个HashMap,分别存储着当前桶内字典的相对(Relative)编码值和之前已经构建的所有字典值的绝对(Absolute)编码值。
image

构建步骤

  • 通过 Spark 创建平表并获取需精确去重列的 distinct 值
  • 根据确定去重后的字面值数量来确认分片数, 并且根据需求判断是否需要扩容
  • 将数据分配(repartition)到多个分片(Partition)中,分别进行编码, 存储到各自的字典文件中
  • 为当前构建任务分配版本号
  • 保存字典文件和 metadata数据(桶数量和桶的 offset 值)
  • 根据条件判断需要删除旧版本

初次构建

  • 计算桶的大小
    取需要构建字典的数量处理单个桶阈值和桶数量默认值的最大值。
  • 创建桶并分配数据进行编码
  • 生成meta文件记录桶的offsets

以下是相关配置项及其默认值。

kylin.dictionary.globalV2-min-hash-partitions=10
kylin.dictionary.globalV2-threshold-bucket-size=500000

image

非初次构建

  • 根据字典数量确定桶是否需要扩容
  • 已编码的字典值对扩容后的桶进行重新分配
  • 读取之前最新版本的字典数据,并分配到各个桶中
  • 将新的值分配到桶中
  • 前一次构建的字典值不会改变

image

版本控制

全局字典会通过给单次构建分配基于时间戳的版本号来进行隔离。加入版本控制的原因是构建任务可能会并发执行,而当前构建全局字典过程中的编码是不支持并发。通过版本控制,每一次编码都能够完整的读取之前构建好的全局字典,这样就保证了最新版本的字典拥有最完整的全局字典编码,而且一个Cube的全局字典每次被读取的时候都会选取最新版本的字典。字典最终在文件存储系统(此处为HDFS)上按版本存储如下图所示。

image

常见问题

  1. 为什么在一个BucketDIctionary需要使用两个Map?

构建过程开始需要对分配到各个桶内的字典从1开始做一个相对(Relative)编码,这一部分字典相对编码值会存储在一个HashMap中,在相对字典值编码完成后,会得到每个桶的offset值,也就是桶内字典的数量,然后根据这个字典值计算出每个桶(桶是有顺序的)内字典值相对于所有桶的offset值的绝对(Absolute)编码,字典的绝对编码也会用另一个HashMap进行存储。

  1. 会不会存在数据倾斜问题?

现在测试下来因为热点构建不出来的概率很小,一般倾斜十亿级别才会过不去,列很多的确可能会造成这个问题,不过编码的桶数是可以无限放大的 除非单key热点,否则调整参数也是很轻松完成构建。

  1. 为什么全局字典的数量能够超过整型最大基数(21亿)的限制?

因为引入了全新的BitMap数据结构Roaring64BitMap,在全局字典编码完成之后,编码会被压缩成二进制存储在Roaring64BitMap对象中,BitMap实际上是通过Long而不再是Integer进行存储的。

c – 使用MSGPACK_DEFINE而不更改类声明

c – 使用MSGPACK_DEFINE而不更改类声明

MsgPack C中有没有办法在不改变类成员的情况下使用MSGPACK_DEFINE?我们希望将消息包内容保留在标题之外,并且只在库中内部使用它.

似乎只是包装每个类都可以工作,但我希望有更好的方法.

解决方法

UPD.或者你可以使用我写的MSGPACK_DEFINE_EXTERNAL宏.

.hpp.erb源可用于here,生成的.hpp为here.

只需#include“define_external.hpp”,然后调用MSGPACK_DEFINE_EXTERNAL传递类及其想要序列化/反序列化的成员.

例如:

MSGPACK_DEFINE_EXTERNAL(v3f,X,Y,Z);

我已经测试了这个头文件,以便与gcc 4.8.2,clang 3.3和MSVC 2010一起使用.

为了在我的项目中实现这一点,我刚刚定义了运算符>>和运算符<<这不像使用MSGPACK_DEFINE那么简单,但它可以工作.

namespace msgpack {

inline v3f& operator>> (object o,v3f& v)
{
    if(o.type != type::ARRAY) { throw type_error(); }
    if(o.via.array.size != 3) { throw type_error(); }
    o.via.array.ptr[0].convert(&v.X);
    o.via.array.ptr[1].convert(&v.Y);
    o.via.array.ptr[2].convert(&v.Z);
    return v;
}

template <typename Stream>
inline packer<Stream>& operator<< (packer<Stream>& o,const v3f& v)
{
    o.pack_array(3);
    o.pack(v.X);
    o.pack(v.Y);
    o.pack(v.Z);
    return o;
}

}

您可以在src / msgpack / type /中找到更多示例.

c# – Xamarin.Forms WidthRequest值的意思

c# – Xamarin.Forms WidthRequest值的意思

在Xamarin.Forms中,以下属性得到一个double:WidthRequest,HeightRequest,Padding,Spacing等
这个数字的意思是什么?是像素还是其他?
是否根据设备屏幕尺寸放置在这些属性中的值?
考虑到可用的屏幕尺寸,我应该如何决定应该使用什么值?

我也试图打印一些元素的宽度,并得到-1的结果.为什么?

谢谢先进,
要么

解决方法

Xamarin.Forms具有使用底层平台的约定的理念
可能.根据这一理念,Xamarin.Forms程序员使用大小定义
由每个特定的平台.程序员通过Xamarin.Forms API遇到的所有大小
在这些与平台相关的设备无关单元中.(c)

在Xamarin表格中,这些数字在特定平台上与英寸和厘米有关系.见下文:

这些是以英寸为单位的关系

> iOS:160单位英寸
> Android:160单位英寸
> Windows Phone:240单位英寸

如果你喜欢公制,这些是厘米的关系

> iOS:64单位到厘米
> Android:64单位到厘米
> Windows Phone:96个单位到厘米

例如,如果要显示宽度为1英寸,高度为2英寸的图像,您可以:

var avatar = new Image{
    WidthRequest = Device.OnPlatform(160,160,240),HeightRequest = Device.OnPlatform(320,320,480)
};

相同的概念适用于间距和填充.这些参数也有默认值.初始设置为-1的“模拟”值.这些属性的值只有在布局系统定位和设置页面上的所有内容时才有效.

希望这可以帮助!

您可以从名为“使用Xamarin表单创建移动应用程序”的书籍中了解更多信息

今天关于设置`axes.linewidth`而不更改`rcParams`全局字典的讲解已经结束,谢谢您的阅读,如果想了解更多关于android.view.ViewGroup $LayoutParams不能被转换为android.widget.AbsListView $LayoutParams、Apache Kylin 4.0精确去重的全局字典原理、c – 使用MSGPACK_DEFINE而不更改类声明、c# – Xamarin.Forms WidthRequest值的意思的相关知识,请在本站搜索。

本文标签: