有一个与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 :
我需要绘制下一个序列:
我已经编写了完全适用于单个值的函数:
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)
答案 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
输出: