通过举例执行numpy数组转换。

np-xarr的Python项目详细描述


np-xarr

通过给出简单的模式,直观地执行numpy数组转换。在

安装

$ pip install np-xarr

使用

^{pr2}$

或者更简单的形式:

>>a=X('[[a0, a1], [a1, a2], ...]')>>a=X('[[a00, a10, ...], [a01, a11, ...], ...]')

其中a表示第一个输入数组,后面的数字表示项的索引。 例如,a01表示索引为(0, 1)的第一个输入数组中的项。在

支持多个输入或输出。在

>>a=X(['[1, 2, ...]','[a, b, ...]'],# multiple input in a list'[1, a, 2, b, ...]; [[a, 1], [b, 2], ...]')# or seperate by ;# or >> a = X('[a0, b0, a1, b1, ...]; [[b0, a0], [b1, a1], ...]')>>a([np.r_[1,2,3,4,5],np.r_[10,20,30]])# for incompatible input shapes, it can figure out the maximum valid output shape(array([1,10,2,20,3,30,4],dtype=int32),array([[10,1],[20,2],[30,3]],dtype=int32))>>a[1]([np.r_[1,2],np.r_[10,20,30])# or just get the transformation for second output[[101],[202]]

可以应用函数。在

>>a=X('[1, 2, 3, 4, ...]','[times(2), neg(1), times(4), neg(3), ...]',f={'neg':lambdax:-x,'times':lambdax:10*x})# a = X('[times(a1), neg(a0), times(a3), neg(a2), ...]')

注意这里的输出序列是[2,1,4,3,…]

>>a(np.r_[0,1,2,3,4,5])[10,0,30,-2,50,-4]

打开包装

>>a=X('1; 2','[*1, *2, *1]')([np.r_[1,2],np.r_[10,20]])# a = X('[*a, *b, *a]')[12102012]

您可以手动提供输出形状

>>a=X('[1, 2, ...]','[[1, 1, ...], [2, 2, ...], ...]')# a = X('[[a0, a0, ...], [a1, a1, ...], ...]')>>a(np.arange(6),outShapes=(-1,3))# or outShapes=[(-1, 3)], [[000][111][222][333][444][555]]

通过提供参数extraShapes。。。在

>>a=X('[1, 2, 3, ...]','[[1, 2], [2, 3], ...]')# a = X('[[a0, a1], [a1, a2], ...]')>>a(np.r_[0,1,2,3],extraShapes=(1,0)))[[01][12][23][30]]

np-xarr是如何工作的

当给定模式时,例如

>>a=X('[a, b, c, ...]','[[a, b], [b, c], ...]')

X将推导出输入和输出之间的转换方程,可以通过

>>ay0=|_x0_|+|_x1_|

其中|_x0_|表示floor(x0)。 方程y0 = |_x0_| + |_x1_|建立了输出索引(x0, x1)和输入索引(y0,)之间的关系,如下所示:

output index (x0, x1)itemequation (x0, x1) -> (y0, )index (y0, )input item
(0, 0)a0 + 0 = 0(0, )a
(0, 1)b0 + 1 = 1(1, )b
(1, 0)b1 + 0 = 1(1, )b
(1, 1)c1 + 1 = 2(2, )c

另一个例子:

>>a=X('[a, b, ...]','[a, a, b, b, ...]')>>ay0=|_0.50*x0_|
^{tb2}$

注意事项:

  • 建议编写至少有两个句点的模式,例如[1,2,…]->;[[1,2],…]将被推断为[1,2,3,…]->;[[1,2],[2,3],…]而不是[[1,2],[3,4],…]

  • 大型阵列效率低下

    输出数组由np.array([inArrays[indexConverter(index)] for index <= outShape])之类的代码构建

  • 只支持公式$y_j = floor(a_ij*x_i) + b_j + floor(c_ij*mod(x_i, d_ij))$的转换

托多

  • []完善例外制度
  • []尝试从计算的方程中使用本机numpy函数来推导可能的转换

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

推荐PyPI第三方库


热门话题
java允许具有不同父类的类扩展类,而无需多重继承   java如何创建动态化的JScrollPane w/JPanel作为客户端?   java如何组织和命名包   在Java中读取属性文件   java无法解释的Android意图行为   在Java中动态执行多个BPEL文件的部署   ssl Java 6 SNI(服务器名称指示)?   java我们可以使用Robot框架自动化web和移动应用程序来执行并行执行   java for star pettern的循环   java为什么BinaryReader在线程中,从netty读取错误的数据包?   在java中将华氏度转换为摄氏度   使用Spark和java处理空值和引号编写CSV文件   Java中已排序日期到块的列表   visual studio代码VSCode Java不是linting或自动完成局部变量,而是自动完成Java快捷方式,如“sysout”