Python 在numpy中,有没有更好的方法以参数化方式对numpy阵列进行切片?

Python 在numpy中,有没有更好的方法以参数化方式对numpy阵列进行切片?,python,numpy,Python,Numpy,我想在函数中以参数化的方式对numpy数组进行切片操作,这样我就可以得到我计算所需的数组元素。我知道如何按索引滑动数组,但我更感兴趣的是以参数化方式对数组元素进行切片,因此不需要指示索引。在我的例子中,我有系数数组c和幂数组p,我还有参数num\u顺序。基本上,num\u顺序决定了切片数组的索引。为此,我进行了以下尝试: 我的尝试: import numpy as np c=[1,1/2, -1/6, 1/12] p= [1,2,3,4] x = np.array([1, 1, 2, 3, 5

我想在函数中以参数化的方式对numpy数组进行切片操作,这样我就可以得到我计算所需的数组元素。我知道如何按索引滑动数组,但我更感兴趣的是以参数化方式对数组元素进行切片,因此不需要指示索引。在我的例子中,我有系数数组
c
和幂数组
p
,我还有参数
num\u顺序
。基本上,
num\u顺序
决定了切片数组的索引。为此,我进行了以下尝试:

我的尝试

import numpy as np

c=[1,1/2, -1/6, 1/12]
p= [1,2,3,4]
x = np.array([1, 1, 2, 3, 5, 8, 13, 21])


def arr_pow(x, num_order):
    output= []
    for i in range(num_order):
        mul = c[i] * np.power(x, p[i])
        output.append(mul)
    return output
因此,如果
num\u order
=2,那么我也将
c
p
的前两项切分为doing
c\u new=c[:-2],
p\u new
=p[:-2],
c\u new=[1,1/2],p\u new=[1,2]
等等。我很好奇,有没有更好的方法可以基于param
num_order
在两个或多个数组中对元素进行切片。有人能告诉我在参数化函数中实现这一点的优雅方法吗?有什么想法吗

更新

import numpy as np

c=[1,1/2, -1/6, 1/12]
p= [1,2,3,4]
x = np.array([1, 1, 2, 3, 5, 8, 13, 21])


def arr_pow(x, num_order):
    output= []
    for i in range(num_order):
        mul = c[i] * np.power(x, p[i])
        output.append(mul)
    return output
与其做
c_new=c[:-1],p_new=[:-1]
if
num_order
=3,和
c_new=c[:-2]
p_new=p[:-2]
如果
num_order=2
等等,还有更优雅的方法(参数化的方式)来做到这一点吗?在python函数中有什么方法可以有效地实现这一点?谢谢

使用以下命令:

num_order = 2
np.array([c[i] * np.power(x, p[i]) for i in range(num_order)])

# Out:
# array([[  1. ,   1. ,   2. ,   3. ,   5. ,   8. ,  13. ,  21. ],
#        [  0.5,   0.5,   2. ,   4.5,  12.5,  32. ,  84.5, 220.5]])

我不确定这是否是您想要的输出(如果您可以更新您的问题,使其包含有用的预期输出):


这里的想法是使用plus实现您想要的结果,无需for循环,而是以参数化的方式。

我不这么认为。
power
与切片有什么关系?甚至你所说的参数化方式是什么意思?首先,我们只是切片1d阵列?e、 g.
x[i:j]
或带有
slice
对象:
s=slice(i,j);x[s]
。显示所有测试用例的预期输出。@hpaulj感谢您的提醒。问题的本质是
x
是像素向量,我想对每个像素值使用泰勒级数。我想提出一个函数,这样我就可以在输入
x
上使用泰勒级数,以及我想要的任何展开顺序。我需要通用函数来实现这一点。有什么想法吗?Thanks@hpaulj您是否有任何可能的尝试来实现这一点?感谢问题的本质是x是像素向量,我想对
x
中的每个像素值使用泰勒级数。我想提出一个函数,这样我就可以在输入x上使用泰勒级数,任意展开。我想通用函数来实现这一点。有什么想法吗?应该是对的,我只是在做精神检查。另外,我想澄清我为什么问这个问题,这样你可能会更清楚地理解这个问题。你能给我几行评论吗:
c[:num\u order,None]*np.power(x[None],p[:num\u order,None])
?我想了解这样做的方式。欢呼:)当您使用
None
索引数组时,您将在该位置插入一个空轴。例如,如果你想做一个乘法表,你可以做
np.arange(10)[None]*np.arange(5)[:,None]
,这在功能上等同于
np.arange(10)。重塑(1,10)*np.arange(5)。重塑(5,1)
。前者是首选,因为它使用副本,而后者使用副本。我看不到链接。我会打开一个新问题并在这里发布新问题的链接。它仍然是关于这个帖子的,我想我可以在这里提问。我所做的是我尝试了你在tensorflow中的尝试,但我得到了
无效的arguminterror
。你有什么想法吗?为什么?你可以看到我的尝试。有什么想法吗?谢谢