小编use*_*tar的帖子

pylab直方图摆脱了南方

当我的一些数据包含"非数字"值时,我在制作直方图时遇到问题.我可以通过使用nan_to_numnumpy 摆脱错误,但是我得到了很多零值,这也搞乱了直方图.

pylab.figure()
pylab.hist(numpy.nan_to_num(A))
pylab.show()
Run Code Online (Sandbox Code Playgroud)

因此,我们的想法是制作另一个阵列,其中所有的纳米值都消失了,或者只是以某种方式在直方图中掩盖它们(最好使用一些内置方法).

python numpy matplotlib nan histogram

15
推荐指数
1
解决办法
2万
查看次数

如何将for-loop推向numpy

我有以下代码正是我想要的(它是kriging方法的一部分).但问题是它太慢了,我想知道是否有任何选择将for-loop推向numpy?如果我推出numpy.sum,并在那里使用轴参数,它会加速一点点,但显然这不是瓶颈.关于我如何能够将forloop推向numpy以加快速度,还是以其他方式加速它的任何想法?)

# n = 2116
print GRZVV.shape  # (16309, 2116)
print GinvVV.shape  # (2117, 2117) 
VVg = numpy.empty((GRZVV.shape[0]))

for k in xrange(GRZVV.shape[0]):
    GRVV = numpy.empty((n+1, 1))
    GRVV[n, 0] = 1
    GRVV[:n, 0] = GRZVV[k, :]
    EVV = numpy.array(GinvVV * GRVV)  # GinvVV is numpy.matrix
    VVg[k] = numpy.sum(EVV[:n, 0] * VV)
Run Code Online (Sandbox Code Playgroud)

我发布了ndarrays n矩阵的维度来清除一些东西

编辑:VV的形状是2116

python numpy kriging

6
推荐指数
1
解决办法
282
查看次数

更有效的计算numpy距离的方法?

我有一个关于如何尽可能快地计算numpy距离的问题,

def getR1(VVm,VVs,HHm,HHs):
    t0=time.time()
    R=VVs.flatten()[numpy.newaxis,:]-VVm.flatten()[:,numpy.newaxis]
    R*=R
    R1=HHs.flatten()[numpy.newaxis,:]-HHm.flatten()[:,numpy.newaxis]
    R1*=R1
    R+=R1
    del R1
    print "R1\t",time.time()-t0, R.shape, #11.7576191425 (108225, 10500) 
    print numpy.max(R) #4176.26290975
    # uses 17.5Gb ram
    return R


def getR2(VVm,VVs,HHm,HHs):
    t0=time.time()
    precomputed_flat = numpy.column_stack((VVs.flatten(), HHs.flatten()))
    measured_flat = numpy.column_stack((VVm.flatten(), HHm.flatten()))
    deltas = precomputed_flat[None,:,:] - measured_flat[:, None, :]
    #print time.time()-t0, deltas.shape # 5.861109972 (108225, 10500, 2)
    R = numpy.einsum('ijk,ijk->ij', deltas, deltas)
    print "R2\t",time.time()-t0,R.shape, #14.5291359425 (108225, 10500)
    print numpy.max(R) #4176.26290975
    # uses 26Gb ram
    return R


def getR3(VVm,VVs,HHm,HHs):
    from numpy.core.umath_tests import inner1d
    t0=time.time()
    precomputed_flat = …
Run Code Online (Sandbox Code Playgroud)

python memory numpy

5
推荐指数
1
解决办法
1847
查看次数

如果列全部为 nan,则使 numpy.nanargmin 返回 nan

是否可以在其中仅包含 nan 的列上使用 ,numpy.nanargmin以便它返回。numpy.nan现在,ValueError当发生这种情况时,它会引发 , 。我不能使用numpy.argmin,因为当列中只有几个 nan 时,这会失败。

http://docs.scipy.org/doc/numpy/reference/ generated/numpy.nanargmin.html 说 是ValueError针对全 nan 切片提出的。在这种情况下,我希望它返回 numpy.nan (只是为了进一步用 nan 掩盖“非数据”)

接下来的一点就是这样做的,但是速度超级慢并且不是真正的Pythonic:

for i in range(R.shape[0]):
    bestindex = numpy.nanargmin(R[i,:])
    if(numpy.isnan(bestindex)):
        bestepsilons[i]=numpy.nan
    else:
        bestepsilons[i]=epsilon[bestindex]
Run Code Online (Sandbox Code Playgroud)

接下来的一点也有效,但前提是不涉及所有 nan 列:

ar = numpy.nanargmin(R, axis=1)
bestepsilons = epsilon[ar]
Run Code Online (Sandbox Code Playgroud)

所以理想情况下,我希望最后一点也能与全纳米列一起使用

python numpy nan

5
推荐指数
1
解决办法
3777
查看次数

如何避免使用numpy for-loops?

我已经编写了下面这段代码,它完全符合我的要求,但速度太慢了.我确信有一种方法可以让它更快,但我似乎无法找到它应该如何完成.代码的第一部分只是为了显示哪种形状.

测量(VV1HH1)
预计算值,VV模拟和HH模拟的两个图像,它们都依赖于3个参数(预先计算(101, 31, 11)值)
索引2只是将VVHH图像放在同一个ndarray中,而不是制作两个3darrays

VV1 = numpy.ndarray((54, 43)).flatten()
HH1 = numpy.ndarray((54, 43)).flatten()
precomp = numpy.ndarray((101, 31, 11, 2))
Run Code Online (Sandbox Code Playgroud)

我们让三个参数中的两个变化

comp = numpy.zeros((len(parameter1), len(parameter2)))

for i,(vv,hh) in enumerate(zip(VV1,HH1)):
    comp0 = numpy.zeros((len(parameter1),len(parameter2)))
    for j in range(len(parameter1)):
        for jj in range(len(parameter2)):
            comp0[j,jj] = numpy.min((vv-precomp[j,jj,:,0])**2+(hh-precomp[j,jj,:,1])**2)
    comp+=comp0
Run Code Online (Sandbox Code Playgroud)

我知道我应该做的显而易见的事情是摆脱尽可能多的for循环,但我不知道如何numpy.min在处理更多维度时使行为正常.

第二件事(不太重要,如果它可以得到矢量化,但仍然很有趣)我注意到它主要占用CPU时间,而不是RAM,但我已经搜索了很长时间,但我找不到一种方法来写"parfor "在matlab中代替"for",(@parallel如果我只是将for循环放在一个单独的方法中,是否可以制作一个装饰器?)

编辑:回答Janne Karila:是的,肯定会改善它,

for (vv,hh) in zip(VV1,HH1):
    comp+= numpy.min((vv-precomp[...,0])**2+(hh-precomp[...,1])**2, axis=2)
Run Code Online (Sandbox Code Playgroud)

肯定是快得多,但有没有可能删除外部for循环?有没有办法使for-loop并行,有@parallel什么东西?

python numpy

4
推荐指数
1
解决办法
2629
查看次数

我如何在python中获得10个随机值?

我是编程新手,我被随机数生成困扰了.我可以使用随机函数"randint"生成随机数,但无法生成一组随机数.例如,我想获得10个随机数.

from random import randint
x = randint(1, 100)
y = randint(1, 100)
isFailedTest = (5<=x<=15) and (10<=y<=11)
selected_test = [x,y]
while (isFailedTest == False):
Run Code Online (Sandbox Code Playgroud)

我可以一次生成1个随机数,但一次不能生成10个随机数.这里1个数字意味着2维数字例子(x,y)=(10,20)我想在我的条件之后获得10个随机数(x,y).我如何实现这一目标?我对编程很新,所以无法弄清楚可以做些什么.所有帮助/建议/推荐都非常感谢.谢谢.

python

-2
推荐指数
1
解决办法
289
查看次数

标签 统计

python ×6

numpy ×5

nan ×2

histogram ×1

kriging ×1

matplotlib ×1

memory ×1