我正在尝试创建一个numpy数组,其中的元素包含一些其他numpy数组元素的一些递增的乘积,如下所示: import numpy as np
def foo(n):
return(365-n)/365
#lim is some integer greater than 0 and less than 365
lim = 50
x = np.arange(0, lim, 1)
#foo(n) is some function
y = foo(x)
z = np.zeros(np.shape(x))
#z is the variable I'm trying to create
我想定义一个NxN矩阵A,它的元素A(i,j)是sin(i^2 + j)。
在MATLAB中,我可以用矢量化方法快速地定义这个矩阵。
N = 2000;
ii = 1:N;
A = sin(ii.^2 + ii');
如何在Python中实现这一点?现在,我正在使用循环,这是缓慢的。
import numpy
N = 2000;
A = numpy.empty((N, N));
for i in range(1,N+1):
for j in range(1,N+1):
A[i-1][j-1] = numpy.sin(j + numpy.power(i, 2.
我正在使用Python3.6。
我想做的是:
import numpy as np
def run_11(x):
return x+1
kk = np.arange(1, 17)
for i in range (kk):
ind = run_11(i)
print (i)
print (ind)
我知道这个错误:
TypeError:只有整数标量数组才能转换为标量索引
我不知道为什么和如何解决它。如有任何建议,将不胜感激。
我正在尝试寻找一种快速的方法(最好不要使用for循环)来模仿以下代码:
# a and b are arrays of the same length
# f is function of 3 scalar variables
res = np.zeros(len(a))
temp = 1
for i in range(len(a)):
temp = f(temp, a[i], b[i])
res[i] = temp
请注意,temp变量在每次迭代时都会更新。这段代码与可以使用NumPy的累积机制实现的功能非常相似。但是,在我的例子中,函数f中使用了几个数组。
函数f可以类
我正在使用numpy运行python,并且我有一个循环,简化后,如下所示:
result = np.zeros(bins)
for i in xrange(bins):
result[f(i)] += source[i]
在这里,结果和源都是numpy数组,f是一组稍微复杂的算术操作。例如,f的一个简化示例可能如下所示
f = lambda x: min(int(width*pow(x, 3)), bins-1)
虽然f的论点一般不是单调的。
这个循环目前是我程序中的瓶颈。我成功地把其他的东西都矢量化了,但是我现在很困惑如何在这里实现它。如何将此循环向量化?
我有一个2D成本矩阵M,可能是400x400,我试图通过它计算出最优路径。因此,我的职能如下:
M[i,j] = M[i,j] + min(M[i-1,j-1],M[i-1,j]+P1,M[i,j-1]+P1)
这显然是递归的。P1是一个加性常数。我的代码(多少起作用)是:
def optimalcost(cost, P1=10):
width1,width2 = cost.shape
M = array(cost)
for i in range(0,width1):
for j in range(0,width2):
try:
我正在尝试计算卡方函数,例如,将任意(黑盒)函数与数据的数值向量数组进行比较。目前我正在python中循环数组,但是像这样的东西非常慢:
n=len(array)
sigma=1.0
chisq=0.0
for i in range(n):
data = array[i]
model = f(i,a,b,c)
chisq += 0.5*((data-model)/sigma)**2.0
return chisq
array是一维numpy数组,a,b,c是标量。有没有办法通过使用numpy.sum()或某种lambda函数等来加速这一过程?我可以看到如何删除一个循环(通
我对python完全陌生。我正在尝试做一件非常简单的事情,评估一个非平凡的函数,它将浮点数作为2D网格上的输入。下面的代码完全符合我的要求,但是由于使用了double for循环,所以速度很慢。
import numpy as np
from galpy.potential import RazorThinExponentialDiskPotential
R = np.logspace(0., 2., 10)
z=R
#initialize with default values for this example
potfunc=RazorThinExponentialDiskPoten
我想要计算输入序列和序列中的一个短片段之间的相似性。结果是一个相似矩阵,每个位置都是对齐的得分。它起作用了,但不幸的是速度慢。如何在python和numpy中更有效地实现循环?我也在考虑使用MPI,但是多线程或者更好的内部numpy解决方案将是有益的。下面是密码。
from Bio import pairwise2
import numpy
....
similarityMatrix = numpy.zeros(shape=(sequenceLength-fragmentLength,sequenceLength-fragmentLength))
for i in xrange(sequ
新的NumPy,可能没有正确的搜索,所以如果这是一个常见的问题,我将采取块.
我正在处理一个需要计算日志(n!)的问题。对于相对较大的数字来说-即。要先计算阶乘,所以我编写了以下函数:
def log_fact(n):
x = 0
for i in range(1,n+1):
x += log(i)
return x
现在的问题是,我希望将它用作传递给curve_fit的函数的一部分:
def logfactfunc(x, a, b, c):
return a*log_fact(x) + b*x + c
from scipy.optimize
结果是大小为300000的二维numpy数组
for i in range(np.size(results,0)):
if results[i][0]>=0.7:
count+=1
在这段python代码中,我花了0.7秒,但我在C++代码中运行它,它只用了不到0.07秒。
那么如何让这段python代码尽可能快呢?
为了加速我的代码,我将一个多维的sumproduct函数从Python转换为Theano。我的Theano代码可以得到相同的结果,但是一次只计算一个维度的结果,所以我必须使用Python for循环来获得最终结果。我认为这会使代码变慢,因为Theano无法优化内存使用和多个函数调用之间的传输(针对gpu)。或者这是一个错误的假设?
那么,我如何更改Theano代码,以便在一次函数调用中计算sumprod?
原始的Python函数:
def sumprod(a1, a2):
"""Sum the element-wise products of the `a1`
我想用Python实现以下Matlab代码:
x=1:100;
y=20*log10(x);
我试着使用Numpy来做这件事:
y = numpy.zeros(x.shape)
for i in range(len(x)):
y[i] = 20*math.log10(x[i])
但这使用了for循环;有没有像Matlab一样的矢量化操作?我知道对于一些简单的数学,比如除法和乘法,这是可能的。但是像这里的对数这样的其他更复杂的运算呢?
Python有一个内置的功能来检查整个片的有效性:。有什么类似的东西是内置的个别指数吗?
具体来说,我有一个索引,比如a = -2,我希望对一个4元素列表进行规范化。是否有与已内置的以下方法等效的方法?
def check_index(index, length):
if index < 0:
index += length
if index < 0 or index >= length:
raise IndexError(...)
我的最终结果是能够用一个非None元素构造一个元组。我目前正在使用list.__getitem_
作为一些数据争论的结果,我得到了一组浮点数,其中一些是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]
>>>
检查我的以下代码;它是在python中实现的sigma_2函数(使用粗略筛选)的一部分,python是除数函数之一
from time import time
from itertools import count
import numpy
def sig2(N, nump=False):
init = time()
#initialize array with value=1 since every positive integer is divisible by 1
if nump:
print 'using numpy'
在NumPy数组上迭代时,Numba看起来比Cython快得多。
我可能缺少哪些Cython优化?
下面是一个简单的例子:
纯Python代码:
import numpy as np
def f(arr):
res=np.zeros(len(arr))
for i in range(len(arr)):
res[i]=(arr[i])**2
return res
arr=np.random.rand(10000)
%timeit f(arr)
每环4.81ms±72.2s(平均±std )。dev.7次运行中,每一次循环100次)
Cython代码
我在Python中没有使用NumPy就做到了这一点:
def fun_list(list_, x):
#set list to odd numbers in list_ raised to number x
s=[]
s= [i**x for i in list_ if (i%2)!=0]
list_=s
print(list_)
测试功能:
list1 = [1, 2, 3, 4]
list2 = [2, 3, 4, 5]
print(fun_list(list1, 2))
print(fun_list(list2, 3))
结果:
[1, 9]
None