小编Kho*_*eir的帖子

Django 1.8.3 - 使用相关对象进行模型字段验证

对于以下模型集(Foo,Bar),您可以将以下代码段的Bar.clean中的交叉验证规则强加到django 1.7.

相同的代码片段RelatedObjectDoesNotExist在django 1.8.3中引发错误.

在django 1.8.3中实现相同结果的新方法和改进方法是什么?

(我已经包含了admin.py代码,仅用于说明如何使用这些模型.)

models.py

from django.db import models
from django.core.exceptions import ValidationError

class Foo(models.Model):
   name = models.CharField("Name", blank=True, max_length=300)

class Bar(models.Model):
   name = models.CharField("Name", blank=True, max_length=300)
   foo = models.ForeignKey('Foo', verbose_name='Foo')

   def clean(self):
      if self.name + self.foo.name != 'FooBar':
         raise ValidationError('Concatenation should be FooBar.')
Run Code Online (Sandbox Code Playgroud)

admin.py

from django.contrib import admin
import models

class BarInline(admin.TabularInline):
    model = models.Bar

class FooAdmin(admin.ModelAdmin):
    model = models.Foo
    inlines = [BarInline,]

site = admin.site
site.register(models.Foo,FooAdmin)
Run Code Online (Sandbox Code Playgroud)

python django foreign-keys django-admin

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

进行更高效的蒙特卡罗模拟

所以,我编写了这个代码,它应该有效地估计定义为h(x)的函数曲线下的面积.我的问题是我需要能够将区域估计到小数点后6位,但我在estimateN中定义的算法似乎对我的机器来说太重了.基本上问题是如何使以下代码更有效?有没有办法摆脱那个循环?

h = function(x) {
    return(1+(x^9)+(x^3))
}
estimateN = function(n) {
    count = 0
    k = 1
    xpoints = runif(n, 0, 1)
    ypoints = runif(n, 0, 3)
    while(k <= n){
    if(ypoints[k]<=h(xpoints[k]))
        count = count+1
    k = k+1
    }
    #because of the range that im using for y
    return(3*(count/n))
}
#uses the fact that err<=1/sqrt(n) to determine size of dataset
estimate_to = function(i) {
    n = (10^i)^2
    print(paste(n, " repetitions: ", estimateN(n)))
}

estimate_to(6)
Run Code Online (Sandbox Code Playgroud)

simulation statistics performance r

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

英语约束免费语法序言

我试图在prolog中实现一个非常简单的约束自由语法时遇到了无限递归问题.

这是我的规则:(vp - >动词短语,np - >名词短语,ap - > adj短语,pp - >预备短语)

    verb(S) :- member(S, [put,  pickup, stack, unstack]).
    det(S) :- member(S, [the]).
    adj(S) :- member(S, [big, small, green, red, yellow, blue]).
    noun(S) :- member(S, [block, table]).
    prep(S) :- member(S, [on, from]).

    vp([V|R]) :- verb(V), pp(PP), np(NP), append(NP, PP, R).
    np([D, N]) :- det(D), noun(N).
    np([D|R]) :- det(D), ap(AP), noun(N), append(AP, [N], R).
    ap([A]) :- adj(A).
    ap([A|R]) :- adj(A), ap(R).
    pp([P|R]) :- prep(P), np(R).
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是ap的规则可以产生任意长的形容词串,所以在某些时候,我试图通过尝试所有这些无限的可能性来试图满足查询.

例如,以下查询将永远不会产生S = [put,the,red,block,on,the,green,block],因为它会首先将左侧"红色"上的形容词短语扩展为无限可能性,然后再尝试对.

?- …
Run Code Online (Sandbox Code Playgroud)

prolog infinite-loop left-recursion dcg failure-slice

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

python:二维矩阵中更快的局部最大值

给定:R是mxn浮点矩阵

输出:O是m×n矩阵,其中O [i,j] = R [i,j] if(i,j)是局部最大值,否则O [i,j] = 0.局部最大值定义为以i,j为中心的3x3块中的最大元素.

使用numpy和scipy在python上执行此操作的更快的方法是什么.

m,n = R.shape
for i in range(m):
    for j in range(n):
        R[i,j]  *= (1 if R[min(0,i-1):max(m, i+2), min(0,j-1):max(n,j+2)].max() == R[i,j] else 0)
Run Code Online (Sandbox Code Playgroud)

python numpy matrix scipy

3
推荐指数
1
解决办法
1034
查看次数