通过举例执行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) | item | equation (x0, x1) -> (y0, ) | index (y0, ) | input item |
---|---|---|---|---|
(0, 0) | a | 0 + 0 = 0 | (0, ) | a |
(0, 1) | b | 0 + 1 = 1 | (1, ) | b |
(1, 0) | b | 1 + 0 = 1 | (1, ) | b |
(1, 1) | c | 1 + 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函数来推导可能的转换
- 项目
标签: