Python 在numpy中,有没有更好的方法以参数化方式对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
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
的前两项切分为doingc\u new=c[:-2],
p\u new=p[:-2],c\u new=[1,1/2],p\u new=[1,2]
等等。我很好奇,有没有更好的方法可以基于paramnum_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]
ifnum_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
。你有什么想法吗?为什么?你可以看到我的尝试。有什么想法吗?谢谢