如何在函数中获取ndarray的当前值?

时间:2015-11-01 11:32:27

标签: python numpy

有一个与numpy.ndarray一起运作的功能:

def func(x):
    print x # here I need a current value of ndarray
    return 5*x

对于某些计算,我需要传递ndarray的当前值,例如迭代时的np.nditer()

输出:

x = array([1, 2, 3]
In [52]: func(x)
[1 2 3]
Out[52]: array([5, 10, 15])

一些 upd

我需要绘制下一个序列:

enter image description here

我已经编写了完全适用于单个值的函数:

In [54]: def my_formula(x):
    ...:     return sum([1/(math.sqrt(i)) for i in range(1, x+1)]

但我需要将其转换为绘图:

def graph(formula, x_range):  
    x = np.array(x_range)  
    y = formula(x) # numpy ndarray!
    plt.plot(x, y)  
    plt.show()

所以这里

return sum([1/(math.sqrt(i)) for i in range(1, x+1)]

我需要ndarray的当前元素,而不是range(1, x+1)

的完整范围

2 个答案:

答案 0 :(得分:2)

您的功能的简单转换将是:

def graph(formula, x_range):  
    x = np.array(x_range)  
    y = [formula(xx) for xx in x]
    y = np.array(y)     
    plt.plot(x, y)  
    plt.show()

没有密谋我可以用以下方式说明:

In [541]: x=np.arange(5)
In [542]: np.array([my_formula(i) for i in x])
Out[542]: array([ 0.        ,  1.        ,  1.70710678,  2.28445705,  2.78445705])

我们可以更精细,并谈论加快速度,使用更多numpy函数等,但这是最简单的改变,将帮助你。

答案 1 :(得分:0)

如果我理解正确并且您想要绘制系列的部分总和,那么您可以使用

import numpy as np
import matplotlib.pyplot as plt

parsum=lambda nvect: [np.sum(1.0/np.sqrt(np.arange(1,nmax+1))) for nmax in nvect]
x=np.arange(1,101)
y=parsum(x)

plt.plot(x,y)
plt.show()

这将定义名为lambda的{​​{1}},该parsum接受n值,它将计算部分求和的n

如果您想要连续绘制连续值,您只需拨打

即可
parsumvec=lambda nmax: [np.sum(1.0/np.sqrt(np.arange(1,n+1))) for n in np.arange(1,nmax+1)]
y=parsumvec(101)
x=np.arange(1,len(y)+1)

plt.plot(x,y)
plt.show()

lambda将生成标量输入参数nmax之前的所有部分总和。

使用nmax=101输出:

output