跳转到主要内容

kwarray模块

项目描述

GitlabCIPipeline GitlabCICoverage Appveyor Pypi Downloads ReadTheDocs

查看文档

https://kwarray.readthedocs.io

Gitlab (主分支)

https://gitlab.kitware.com/computer-vision/kwarray

Github (镜像)

https://github.com/Kitware/kwarray

Pypi

https://pypi.ac.cn/project/kwarray

此项目的官方网站是: https://gitlab.kitware.com/computer-vision/kwarray

kwarray模块实现了对numpy和torch的一些纯Python扩展。

kwarray模块最初是作为numpy的扩展,以及一个类似pandas的DataFrame对象,具有更快的行和列访问。但它还包括一个ArrayAPI,这是一个允许torch和numpy之间100%互操作性的包装器。它还包含一些算法,如setcover和mincost_assignment。

顶级API是

from kwarray.arrayapi import ArrayAPI, dtype_info
from .algo_assignment import (maxvalue_assignment, mincost_assignment,
                              mindist_assignment,)
from .algo_setcover import (setcover,)
from .dataframe_light import (DataFrameArray, DataFrameLight, LocLight,)
from .fast_rand import (standard_normal, standard_normal32, standard_normal64,
                        uniform, uniform32,)
from .util_averages import (RunningStats, stats_dict,)
from .util_groups import (apply_grouping, group_consecutive,
                          group_consecutive_indices, group_indices,
                          group_items,)
from .util_misc import (FlatIndexer,)
from .util_numpy import (arglexmax, argmaxima, argminima, atleast_nd, boolmask,
                         isect_flags, iter_reduce_ufunc, normalize,)
from .util_random import (ensure_rng, random_combinations, random_product,
                          seed_global, shuffle,)
from .util_slices import (embed_slice, padded_slice,)
from .util_slider import (SlidingWindow, Stitcher,)
from .util_torch import (one_hot_embedding, one_hot_lookup,)

ArrayAPI

kwarray 中最有用的功能之一是 kwarray.ArrayAPI 类 —— 一个帮助连接 numpy 和 torch 的类。此类包含静态方法,实现了部分 numpy API,并在 torch.Tensor 或 numpy.ndarray 对象上等效操作。

这是因为每个函数调用都会检查输入是否为 torch 张量或 numpy 数组,然后采取适当的操作。

正如你所想象的那样,在每次函数调用中验证输入可能很慢。因此,推荐使用数组 API 的方法是通过 kwarray.ArrayAPI.impl 函数。此函数只检查一次,然后返回另一个对象,该对象直接对后续相同类型的数据项执行正确的操作。

以下示例演示了两种使用模式。

import torch
import numpy as np
data1 = torch.rand(10, 10)
data2 = data1.numpy()
# Method 1: grab the appropriate sub-impl
impl1 = ArrayAPI.impl(data1)
impl2 = ArrayAPI.impl(data2)
result1 = impl1.sum(data1, axis=0)
result2 = impl2.sum(data2, axis=0)
assert np.all(impl1.numpy(result1) == impl2.numpy(result2))
# Method 2: choose the impl on the fly
result1 = ArrayAPI.sum(data1, axis=0)
result2 = ArrayAPI.sum(data2, axis=0)
assert np.all(ArrayAPI.numpy(result1) == ArrayAPI.numpy(result2))

其他注意事项

kwarray.ensure_rng 函数可以帮助你正确维护和控制本地有种子随机数生成。这意味着你不会破坏另一个库的随机状态/你的随机状态被破坏。

DataFrameArrayDataFrameLight 实现了 pandas API 的一部分。它们的性能不如前者强大,但速度快得多。主要的缺点是失去了 loc,但 iloc 可用。

uniform32standard_normal32 是比它们的 64 位 numpy 对应版本更快的 32 位随机数生成器。

mincost_assignment 是 Munkres / 匈加利算法。它解决分配问题。

setcover - 使用近似或精确解解决最小加权集覆盖问题。

one_hot_embedding 是一个快速执行 OHE 深度学习技巧的 numpy/torch 方法。

group_items 是一种快速按另一个 numpy 数组分组 numpy 数组的方法。为了细粒度控制,我们还公开了 group_indices,它按 numpy 数组的索引分组,以及 apply_grouping,它通过这些索引对 numpy 数组进行分区。

boolmask 有效地反转 np.where

用途

这是我在我项目中使用这个库的各个组件的频率

函数名

用途

kwarray.ensure_rng

239

kwarray.ArrayAPI

148

kwarray.atleast_nd

50

kwarray.DataFrameArray

43

kwarray.group_indices

40

kwarray.stats_dict

34

kwarray.normalize

28

kwarray.embed_slice

21

kwarray.shuffle

17

kwarray.padded_slice

14

kwarray.SlidingWindow

14

kwarray.isect_flags

12

kwarray.RunningStats

12

kwarray.standard_normal

10

kwarray.setcover

8

kwarray.robust_normalize

7

kwarray.boolmask

7

kwarray.one_hot_embedding

7

kwarray.uniform

6

kwarray.find_robust_normalizers

6

kwarray.Stitcher

6

kwarray.apply_grouping

6

kwarray.group_consecutive

5

kwarray.argmaxima

4

kwarray.seed_global

4

kwarray.FlatIndexer

3

kwarray.group_items

3

kwarray.arglexmax

2

kwarray.DataFrameLight

2

kwarray.group_consecutive_indices

1

kwarray.equal_with_nan

1

kwarray.dtype_info

1

kwarray.unique_rows

0

kwarray.uniform32

0

kwarray.standard_normal64

0

kwarray.standard_normal32

0

kwarray.random_product

0

kwarray.random_combinations

0

kwarray.one_hot_lookup

0

kwarray.mindist_assignment

0

kwarray.mincost_assignment

0

kwarray.maxvalue_assignment

0

kwarray.iter_reduce_ufunc

0

kwarray.generalized_logistic

0

kwarray.argminima

0

kwarray.apply_embedded_slice

0

kwarray.NoSupportError

0

kwarray.LocLight

0

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面