numcube通过添加命名和注释轴扩展了numpy多维数组的功能。

numcube的Python项目详细描述


numcube通过添加命名和注释轴扩展了numpy多维数组的功能。如此 结构称为立方体。NuxCube允许涉及多个立方体的操作,具有自动轴匹配和 对准。它允许基于轴值的过滤和聚合。其中一个目标是提供类似的api 去努比。在内部,它使用numpy数组作为底层数组和轴。

轴匹配

在涉及多个立方体的操作中,轴是匹配和对齐的。匹配意味着比较轴名称。 具有相同名称的轴是对齐的(见下文),而唯一的轴是广播的(见数组 广播)。

立方体在大多数特征中并不依赖于轴的特定顺序。尽管如此, 该操作的轴顺序与该操作中的第一个立方体相同,后面是另一个立方体的唯一轴 遵守他们的命令。

< H2>轴对齐< /H2>

基本上有两种类型的轴。轴有两种类型:索引轴和系列轴。系列有固定顺序或 值和值不需要是唯一的。索引必须具有唯一值,可用于在 轴对齐。

如果其中一个轴是序列,另一个轴是索引,则序列中的值必须是索引中的值的子集; 结果轴为系列轴。

如果两个轴都是index类型,则它们必须包含相同的值;但是,这些值可以具有不同的顺序;以及 结果轴是第一个索引轴。

如果两个轴都是串联的,则它们必须相等-它们必须以相同的顺序包含相同的值。结果 轴是第一系列轴。

过滤值

可以使用三种不同的方法筛选多维数据集: 1)通过轴值过滤-函数过滤器(…) 2)沿轴按索引过滤-函数take(…) 3)通过逻辑选择器沿轴过滤-功能压缩(…)

函数take(…)和compress(…)的语义与numpy包中的相同。

`python >> from numcube import Index, Cube >> Y = Index("year", range(2014, 3)) >> Q = Index("quarter", ["Q1", "Q2", "Q3", "Q4"]) >> sales = Cube([[14, 16, 13, 20], [15, 15, 10, 19], [16, 17, 15, 21]], [Y, Q]) >> # filter by dimension attribute >> salesH1 = sales.filter("quarter", ["Q1", "Q2"]) >> # filter by numeric indices >> salesH1 = sales.take("quarter", [0, 1]) >> # filter by logical vector >> filter_q = np.array([True, True, False, False] >> salesH1 = sales.compress("quarter", filter_q)) `

运算符

多维数据集支持两个多维数据集之间的算术运算。立方体轴被匹配和对齐,并且操作 按元素执行。

`python >> from numcube import Index, Cube >> year_ax = Index("year", [2014, 2015]) >> quarter_ax = Index("quarter", ["Q1", "Q2", "Q3", "Q4"]) >> sales = Cube([[14, 16, 13, 20], [15, 15, 10, 19]], [year_ax, quarter_ax]) >> prices = Cube([1.50, 1.52, 1.53, 1.55], [year_ax]) >> revenues_q = sales * prices  # quarterly revenues `

多维数据集也可以使用标量值进行操作,标量值被视为无量纲多维数据集。

`python >> Y = Index("year", range(2014, 2)) >> Q = Index("quarter", ["Q1", "Q2", "Q3", "Q4"]) >> prices = Cube([[1.50, 1.52, 1.53, 1.55], [1.48, 1.47, 1.46, 1.49], [Y, Q]) >> discount = 0.5 >> discounted_prices = sales * discount  # operation with scalar `

聚合

可以使用聚合函数sum、mean、min、max等沿轴聚合多维数据集值。所有聚合 函数允许定义要聚合的轴、要保留的轴或要聚合的值 要分组。

`python >> total_revenues = revenues.sum() >> average_annual_revenues = revenues.mean("quarter") >> total_annual_revenues = revenues.sum(keep="year") `

聚合也可以用于沿着非唯一值的轴来分组值,例如: `python >> subject = Axis('subject', [math', 'biology', 'math', 'physics', 'math', 'biology', 'math', 'physics']) >> score = Cube([65, 80, 95, 52, 35, 50, 89, 95], subject) >> score_by_subject = score.mean(group='subject') `

一般的聚合函数是reduce(),可以为其提供用户定义的聚合函数。 `python >> decile_9th = score.reduce(func=lambda x: np.percentile(x, 90.0)) `

逻辑聚合函数all()和any()可用于测试多维数据集中的所有或任何逻辑值是否为真。 `python >> c = Cube(...) >> d = Cube(...) >> if (c > d).all():  # to test if all values in c are greater than respective values in d ` 注意,比较运算符使用相同的轴匹配、对齐和ADN广播作为普通算术运算符。

其他

  • 所有类的接口都是为支持不变性而设计的
  • 立方体支持数值函数,如sin、cos、log、exp等。
  • 换位(在n维空间)改变轴的顺序

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
mapDb Java中的序列化序列化和反序列化对象   java Android Studio SearchView图标未出现   java如何在应用程序中集成广告   java如何在startActivityForResult()之前启动startActivity()   java创建DelegateForest并按预定顺序显示   特定url的java筛选器映射   面向对象Java继承:需要多个扩展   我怎样才能避免java。sql。I/O错误导致SQLException:连接重置?   Scala中的java多维数组   java Ifless代码:这只是一个智力上的挑战,还是实际有用?   java为什么我的@override for contains不起作用?   java Hazelcast文件从客户端上载到服务器   java按水平顺序展开单元格?   java从另一个DAO工厂调用一个DAO   java中的日期格式DateFormat提供意外结果   2d如何在java窗口上显示48X48像素的12X12网格图像   使用iText 5提取图像时出现java错误:“颜色空间不受支持”   java如何在Intellij方法中用参数重构为带字段的类