我想要生成形式的随机向量。
[ i if random.uniform(0,1) <= probs[i] for i prange(K) ]
对于概率的K长度数组,probs。每个生成的向量都有0和K元素之间的某个位置。从概念上讲,这就像翻转K特定的硬币(具有特定的头的概率),并记录其中的哪个硬币显示头部。
任意返回长度使得很难在numba中使用任何自动并行化选项。例如,
from numba import prange, njit, int64, float64
import numpy as np
@njit([int64[:](float64[:], int64)])
def r
我有一节课,我想跟伦巴一起加速。这个类为每个实例使用了一个“随机数生成器”,只需使用特定的种子创建NumPy的RandomState实例(因此我以后可以复制我的工作)。当我使用Numba的autojit时,我会得到一个奇怪的错误,它不会出现在“常规”Python中。
幸运的是,这种行为非常容易复制。下面是一个简单的示例,它说明了错误:
from numpy.random import RandomState
from numba import autojit
# ------- This works in "regular Python" ------------
clas
试图找出如何在使用jitclass时跳过类方法。
有一个相当大的递归模型(差不多,一个庞大的循环),给定的路径依赖的计算,不能用直线Numpy矢量化。
这个类通过一系列numpy数组运行,通常使用numba友好的语法,但是我有一个部分以有序的方式调用了几个方法:
def operations(self, i, ops_order_config):
ops_dict = self.ops_dict
for index in range(len(waterfall_config)):
try:
if isinstance(ops_conf
我尝试将数据填充到numpy数组中。然而,对于更高的索引,它需要越来越多的时间。为什么? 我怎样才能防止这种情况发生呢?我已经在最终维度中创建了数组... import random
import numpy as np
# p = [ ... 2200 values in a python list ... ]
iterations = 1000
max_draws = len(p)-1
percentiles = np.zeros(max_draws)
money_list = np.zeros(iterations)
invest = 100
for k in range(1,
我试图在0-1之间设置随机数,直到这些值之和为>=1。这个过程对nTime进行迭代。代码如下:
from random import random
def funct(n): #10_000
media = 0
for _ in range(n):
result = 0
count = 0
while result < 1:
x = random()
result += x
count += 1
if result >
我是Numba的初学者。我很难在GPU中重新排列数组的行。
例如,在Numba CPU中,这可以通过
from numba import njit
import numpy as np
@njit
def numba_cpu(A, B, ind):
for i, t in enumerate(ind):
B[i, :] = A[t, :]
ind = np.array([3, 2, 0, 1, 4])
A = np.random.rand(5, 3)
B = np.zeros((5, 3))
numba_cpu(A, B, ind)
但是它不适用于cuda.jit
问题
Numpy基本上可以更快地将数组内容复制到另一个数组(至少看起来,对于足够大的数组,Numpy更快)。
我是,并不是期望Numba更快,但是几乎一样快,似乎是一个合理的目标。
最小工作实例
import numpy as np
import numba as nb
def copyto_numpy(a, b):
np.copyto(a, b, 'no')
@nb.jit(nopython=True)
def copyto_numba(a, b):
N = len(a)
for i in range(N):
b[i] = a[i]
给定一个数据矩阵,其离散项表示为一个2D数字数组,我试图计算某些特征(列)的观测频率,只查看某些实例(矩阵的行)。
我可以很容易地使用numpy,在完成了一些花哨的切片之后,将bincount应用于每个切片。在纯Python中这样做,使用外部数据结构作为计数累加器,是C风格的双循环。
import numpy
import numba
try:
from time import perf_counter
except:
from time import time
perf_counter = time
def estimate_counts_numpy(data
在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代码
我想知道是否有一种方法可以得到两个向量v,w沿给定的numpy轴的所有可能的差异?例如,沿着最后一个轴得到所有的差异?
也就是说,我正在搜索的是以下for循环的numpy实现:
data = np.random.normal(size=(100,10,50))
out = np.zeros((data.shape[0],data.shape[1],data.shape[1],data.shape[2]))
for i in range(data.shape[1]):
for j in range((data.shape[1])):
out[:,i,j,:] = da
我试图使用numba的@njit快速计算。在我的代码中有一个函数,调用它,fn1(别名),它需要跳转。这个fn1调用另一个函数fn2(别名)。据我理解,这两种功能都需要放弃。
我在下面发布了一个类似于fn2的功能。下面的代码不符合最小可重现性示例,因为它需要读取csv文件,并且只是用来理解问题的本质。
@njit
def calculate_prob(list_of_value):
list_to_return = []
for xx in list_of_value:
xdf = pd.read_csv(r'../corpus/{}.csv'.format(
根据,应该支持numpy数组创建函数zeros和ones。但是,使用简单的函数测试这一点会导致从numpy导入zeros函数时出现nopython错误。但是,如果我使用import numpy as np并使用np.zeros,就没有问题了。我从numpy那里得到的功能有什么不同吗?我只想导入我需要的函数,而不是整个numpy库。
此代码段失败:
from numpy import array
from numpy import zeros
from numpy.random import rand
from numba import njit, prange
# @njit()
@njit
我在导入quantecon.时遇到问题我正在运行Python3.6.0,但我在输入以下命令时收到以下错误消息
import quantecon
在IPython终端中:
UntypedAttributeError: Failed at nopython (nopython frontend)
Unknown attribute 'iinfo' of type Module(<module 'numpy' from
'C:\\Users\\User\\Anaconda3\\lib\\site-packages\\numpy\\__init__.py
Numba可以读取文件吗?
我尝试使用标准的Numpy方法save和load,但得到了一个不支持的错误。
Numba还可以处理其他格式吗?如果不是,当需要从文件中读取并且仍然想要使用Numba的功能时,应该怎么做?
这是我尝试过的:
import numpy as np
from numba import njit
a = np.random.randn(400, 400)
np.save('test', a)
@njit
def f():
a = np.load('test.npy')
return a
b = f()
> TypingE