我是Python的新手,从NumPy开始。
我试着做了以下事情:
a = np.arange(1, 20)
f = np.vectorize([x/(x+1) for x in a])
f(a)
TypeError: 'list' object is not callable <-- got this error
所以我想知道有没有可能将列表理解向量化,以及“对象不可调用”是什么意思?为了将来的参考,提前感谢
我想从一个函数构造一个2D数组,这样我就可以利用jax.jit了。 我通常使用numpy的方法是创建一个空数组,然后就地填充该数组。 xx = jnp.empty((num_a, num_b))
yy = jnp.empty((num_a, num_b))
zz = jnp.empty((num_a, num_b))
for ii_a in range(num_a):
for ii_b in range(num_b):
a = aa[ii_a, ii_b]
b = bb[ii_a, ii_b]
xyz = self.get_coor
为了解决我的问题,我不得不使用来自mpmath模块的伽马函数,而不是投入。但是,当变量从matplotlib.pyplot数组中提取,并且y-值应该以相同的格式生成时,我将使用numpy绘制函数。但是在这样做的时候,我收到了一条TypeError的错误消息,抱怨从数组到强积金的转换。
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import quad, dblquad
import mpmath as mp
low, up = 5.630e5, 1.167e12
alpha, thresh
如果我有一个1D的numpy.ndarray b和一个我想矢量化的Python function f,使用numpy.vectorize函数很容易:
c = numpy.vectorize(f)(a)。
但是,如果f返回1D numpy.ndarray而不是标量,我如何构建2D numpy.ndarray呢?(也就是说,我希望从f返回的每个1D numpy.ndarray都成为新2D numpy.ndarray中的一行。)
示例:
def f(x):
return x * x
a = numpy.array([1,2,3])
c = numpy.vectorize(f)(a)
de
作为一些数据争论的结果,我得到了一组浮点数,其中一些是NaNs。我知道这个有效值是一些对象的整数I。因此,我想把它们作为整数。尽管如此,NaNs不能被转换为int,所以我尝试只将有限值转换为整数。另外,如果上游有一些奇怪的原因,我会得到一个有非零小数的值,我想将它视为无效,并将它转换为NaN。
基准逻辑是作为列表理解实现的,它的工作方式与预期的一样:
>>> [int(val) if float(val).is_integer() else np.nan for val in np.array([1, 2, 3, 4])]
[1, 2, 3, 4]
>>>
在numpy数组上映射函数的最有效方法是什么?在我目前的项目中,我一直在这样做:
import numpy as np
x = np.array([1, 2, 3, 4, 5])
# Obtain array of square of each element in x
squarer = lambda t: t ** 2
squares = np.array([squarer(xi) for xi in x])
但是,这似乎非常低效,因为在将新数组转换回numpy数组之前,我使用列表理解将新数组构造为Python列表。
我们能做得更好吗?
在我编写的模型的一个步骤中,我必须计算一个量的误差函数。我想做的事情看起来是这样的:
from math import erf
import numpy as np
import pymc as pm
sig = pm.Exponential('sig', beta=0.1, size=10)
x = erf(sig ** 2)
这是因为erf不适用于数组,所以失败了。我试过:
@pm.deterministic
def x(sig=sig):
return [erf(s) for s in sig]
但没有成功,我知道有可能得到以下结果:
np_erf = np.v
我有这样的Python代码:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.int(x)
x = np.arange(1, 15.1, 0.1)
plt.plot(x, f(x))
plt.show()
而这样的错误:
TypeError: only length-1 arrays can be converted to Python scalars
我怎么才能修好它?
在python (+ pandas/numpy/scipy/statsmodel)中,是否有一个函数可以返回自相关wrt延迟?有没有像这样的现成的库函数? 为了避免混淆,我想要以下内容,只是我不想绘制它,但我希望它作为一个序列(pd.Series或pd.DataFrame)返回: import numpy as np
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf
from matplotlib import pyplot as plt
plt.ion()
s = pd.Series(np.sin(
我对Python非常陌生(在过去,我使用Mathematica、Maple或Matlab脚本)。我印象非常深刻的是,NumPy如何能够对数组上的函数进行评估,但在几个维度上实现它时却遇到了问题。我的问题很简单(请不要笑):是否有一种更优雅和有效的方法来评估某些函数f(它定义在R^2上)而不使用循环?
import numpy
M=numpy.zeros((10,10))
for i in range(0,10):
for j in range(0,10):
M[i,j]=f(i,j)
return M
我有一个Python对象的numpy数组。我希望将数组与python对象进行比较,并且不希望使用==运算符进行比较,但仅进行引用比较就足够满足我的要求了。
import numpy as np
a = np.array(["abc", "def"], dtype="object")
a == "abc"
我确信对于我的数组,引用副本就足够了。假设我的数组中的所有字符串都是interned。
这主要是为了在比较大量值时提高性能。Python对象比较非常慢。
A是"abc“不会做我想做的事,因为
In [1]: import
我有一个日期时间对象数组,我想用Python对它们进行直方图。
Numpy 方法不接受日期时间,引发的错误是
File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 176, in histogram
mn, mx = [mi+0.0 for mi in range]
TypeError: unsupported operand type(s) for +: 'datetime.datetime' and 'float'
除了手动转换datetime对象之外
我想在一个字符串数组上映射一个函数f。我构造了一个矢量化版本的f并将其应用到我的数组中。但是数组的第一个元素被传递了两次:
import numpy as np
def f(string):
print('called with', string)
a = np.array(['110', '012'])
fv = np.vectorize(f)
np.apply_along_axis(fv, axis=0, arr=a)
called with 110
called with 110
called with 012
为什么会这