Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 47

0
votes
answers
32 views
+10

AWS Lambda回調被開放的mongodb連接阻塞了嗎?

0

我已經設置了一個AWS lambda來爲我做一些數據保存到MongoDB。我想重新使用連接,所以每次調用lambda時都不必創建新的連接。但是如果我打開db連接,Lambda處理程序的回調不起作用!AWS Lambda回調被開放的mongodb連接阻塞了嗎?

有沒有什麼我做錯了多數民衆贊成創造這種??行爲?這是我的代碼:

var MongoClient = require('mongodb').MongoClient 

exports.handler = (event, context, callback) => { 
    MongoClient.connect(process.env.MONGOURL, function (err, database) { 
     //database.close(); 
     callback(null, "Successful db connection") 
    }); 
} 
+0

[從文檔:(http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html)*「在你的lambda函數代碼的任何聲明(外例如,如果您的Lambda函數建立了數據庫連接,而不是重新建立連接,那麼原來的連接將在隨後的調用中使用。 「* –

+0

所以」簡單地說「**相同的答案**用於持久化和共享模塊化代碼(或函數)之間的連接,也適用於一般nodejs應用程序適用於此。請參閱[如何管理Node.js Web應用程序中的MongoDB連接?](https://stackoverflow.com/questions/10656574/how-do-i-manage-mongodb-connections-in-a-node-js- Web應用程序)。它只是你要實現的'getDB()'函數需要被聲明爲任何「處理器」代碼的「外部」,並且在處理程序中你只需獲取該連接的當前「實例」,這是事實「持久化」 。就像文檔說的一樣。 –

+0

@NeilLunn必須告訴Lambda不要等待事件循環爲空,而是要繼續並返回結果並凍結容器。 –

沙发
0
1

這是由於未設置context.callbackWaitsForEmptyEventLoop = false而導致的。如果保留默認true,回調不會導致Lambda返回響應,因爲您的數據庫連接將事件循環保持爲空。

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html

+0

完美!謝謝! – AlexKogan

0
votes
answers
24 views
+10

使用.NET核心在aws lambda中讀取excel文件

2

我有一個在AWS Lambda中運行的.NET Core應用程序。我現在有一個需求來閱讀並對Excel文件進??行一些計算。我發現對於Excel在.NET的核心解析兩個庫,但每次似乎並不能夠在lambda運行不同的原因:使用.NET核心在aws lambda中讀取excel文件

我有任何除了選擇:

  1. 等待拉姆達支持.NET核2.0
  2. 不使用lambda

謝謝。

+2

此鏈接可能有所幫助:https://stackoverflow.com/questions/33436525/how-to-parse-excel-rows-back-to-types-using-epplus/37746915#37746915 –

沙发
0
2

如果您正在尋找替代選項,則可以使用Google表格和API代替使用Excel。

可以從Lamda調用Google Sheets API,如果存在複雜的讀寫操作,還可以在Google Sheet中編寫應用程序腳本,並從Lambda調用它。

我們處於類似的情況,並將Excel導入到Google表格,並能夠進行計算工作。

0
votes
answers
29 views
+10

發送值作爲參數,以檢查是否存在或不使用貓鼬mongodb

0

嗨我使用lambda函數檢查在本地運行的mongodb中的用戶名和密碼。發送值作爲參數,以檢查是否存在或不使用貓鼬mongodb

module.exports.handler = (event, context, callback) => { 
    console.log('login'); 
    const { username, password } = JSON.parse(event.body); 
    console.log("username--->",username); 
    console.log("password-->",password) 

    try { 
    // Authenticate user 
    const user = users.login(username, password); 
    console.log("----->inside login handler!!!",user); 

這就是我發送的值在DB檢查

login = function (username, password) { 
    console.log("--------inside login of users",username,password) 
    userRegister.findOne({ 
     username : username, 
     password : password 
    }).then(function(err,data){ 
     if (err) { 
     console.log("---------------err", err) 
     return _.omit(err); 
     } 
     else { 
     console.log("---------------data", data) 
     return _.omit(data); 
     } 
    }) 
    } 

值不返回任何東西,即時得到不確定的! findOne不工作,我想!

在此先感謝

沙发
0
0

你爲什麼匹配密碼。在findOne中,我認爲在將它們存儲到數據庫之前,您應該已經對密碼進行了散列處理。如果不是,我天意建議這樣做。匹配的密碼,您已經使用你哈希庫

login = function (username, password) { 
    console.log("--------inside login of users",username,password) 
    userRegister.findOne({ 
     username : username // Remove password from here 
    }).then(function(err,data){ 
     if (err) { 
     console.log("---------------err", err) 
     return _.omit(err); 
     } 
     else { 
     // Match password here 
     console.log("---------------data", data) 
     return _.omit(data); 
     } 
    }) 
    } 
板凳
0
1

使用發現由用戶提供的值讓你打針容易找到文檔後,例如:

"username": {"$gt": ""} 
"password": {"$gt": ""} 

我會使用第三方像passport本地認證。

您至少可以通過用戶名找到用戶,然後使用'==='驗證用戶名和密碼。

至於findOne返回undefined,嘗試使用類似Robomongo的工具執行相同的查詢,您的語法看起來是正確的。

+0

「用戶名」:{「$ gt」:「」} 「password」:{「$ gt」:「」}我不明白,你在說什麼 – Grijan

+0

有了這個查詢,能夠在數據庫中與第一位用戶一起登錄,而不必知道其憑證。 (任何字符串都大於空字符串)如果您熟悉SQL注入,它相當於'或1 == 1' – Tai

0
votes
answers
26 views
+10

如何使用函數式編程迭代並在列表中查找五個連續數字的最大乘積?

13

我必須使用函數式編程來實現以下函數,其中包含從0到9的數字列表。目標是找到列表中具有最大產品的五個連續元素。該函數應該使用函數返回最大產品索引的元組和最大產品而不使用的值。如何使用函數式編程迭代並在列表中查找五個連續數字的最大乘積?

我可以很容易地實現這個沒有函數式編程,但我沒有任何循環實現它。 這是迄今爲止我的方法,但我堅持的部分是如何循環訪問數組以找到沒有循環的連續五個數字。我正在嘗試使用地圖來做到這一點,但我不認爲這是正確的。有沒有可能以任何方式包含枚舉?任何幫助表示讚賞。

def find_products(L): 
    val = map(lambda a: reduce(lambda x,y: x*y, L),L) 
    print (val) 
+3

'map'和'reduce'使用'loops'幕後,試圖避免'列表comprehensions'例如使用循環將要相當困難,並沒有真正的好處。 –

+4

如果您使用遞歸,您幾乎可以直接避免循環。 Haskell這樣做。但是,Haskell對此進行了優化,Python可能不會。所以你會很快進入最大遞歸深度。 - 無論如何,你在動作風格上做什麼動機? –

+10

函數式編程=/=避免循環。 – trincot

沙发
0
7

這不會有任何顯式循環或致電max功能。該函數假定輸入列表中至少有五個元素,並輸出一個元組(start_index, max_product)

from functools import reduce, partial 
import operator 

def f(l): 
    win = zip(l, l[1:], l[2:], l[3:], l[4:]) 
    products = map(partial(reduce, operator.mul), win) 
    return reduce(lambda x, y: x if x[1] > y[1] else y, enumerate(products)) 
In [2]: f([1, 2, 3, 4, 7, 8, 9]) 
Out[2]: (2, 6048) 

In [3]: f([2, 6, 7, 9, 1, 4, 3, 5, 6, 1, 2, 4]) 
Out[3]: (1, 1512) 

win = zip(l, l[1:], l[2:], l[3:], l[4:])創建在輸入列表大小5的滑動窗口迭代器。 products = map(partial(reduce, operator.mul), win)是在win的每個元素上調用partial(reduce, operator.mul)(轉換爲reduce(operator.mul, ...))的迭代器。 reduce(lambda x, y: x if x[1] > y[1] else y, enumerate(products))將計數器添加到products並返回具有最高值的索引 - 值對。

如果你需要一個更一般的版本和/或輸入列表很大,你會使用itertools.islice

from itertools import islice 

def f(l, n=5): 
    win = zip(*(islice(l, i, None) for i in range(n))) 
    ... 

上面的代碼使用生成器表達式這是一個循環,在技術上。這方面的一個純功能的版本可能看起來像

from itertools import islice 

def f(l, n=5): 
    win = zip(*map(lambda i: islice(l, i, None), range(n))) 
    ... 
+0

這看起來不錯,可能與OP期待的最接近。 –

+0

順便說一句,你可以使用'win = zip(*(l [i:]爲我在範圍(5)))'中獲得更一般的答案。 –

+2

@EricDuminil是的,但如果列表很大'itertools.islice'應該是首選 – vaultah

板凳
0
7
from functools import reduce #only for python3, python2 doesn't need import 
def find_products(L): 
    if len(L)==0: 
     return 0 
    if len(L) <= 5: 
     return reduce(lambda x,y:x*y, L) 
    pdts = (reduce(lambda a,b:a*b,L[pos:pos+5]) for pos in range(len(L)-4)) # or pdts = map(lambda pos: reduce(lambda a,b:a*b,L[pos:pos+5],0),range(len(L)-4)) 
    mx = reduce(lambda x,y: x if x>y else y, pdts) 
    return mx 

pdts包含了所有可能的5元組的產品,然後使用reduce模仿max功能,我們發現產品中的最大值。

+1

如果我錯了,請糾正我,但是我們不能在函數式編程中使用條件語句嗎?或者列表理解中的任何循環? – ce1

+5

@ comp.eng。函數式編程中的條件沒有任何問題。Haskell有,如果,守衛子句和模式匹配,所有形式的條件 - 沒有辦法停止無條件遞歸。 – Mephy

地板
0
2

你可以做到以下幾點:

  • 對於每一個在range(0, len(L) - 5)
  • 開始索引的索引映射到的start元組和項目的產品L[start:start + 5]
  • 減少元組具有一個最高的產品
  • 獲取結果元組的第一個值=具有最高產品的5個元素的起始索引
  • 返回切片L[result:result + 5]

該算法可以進一步改進,以避免重新計算子產品,但使用「滾動產品」,即更新爲您從左至右減少,由元素除以被刪除,並乘以新添加的元素。

4楼
0
0

這裏是一個Haskell的解決方案,這是純粹的功能:

import Data.List 

multiply :: [Int] -> Int 
multiply = foldr (*) 1 

consecutiveProducts :: [Int] -> [(Int,Int)] 
consecutiveProducts xs = 
    [(i,multiply $ take 5 h) | (i,h) <- zipped, length h >= 5] 
    where 
     indices = reverse [0..(length xs)] 
     zipped = zip indices (tails xs) 

myComp (i1,h1) (i2,h2) = compare h2 h1 

main = print $ head $ sortBy myComp $ consecutiveProducts [4,5,3,1,5,3,2,3,5] 

這裏是做什麼的:

  • 在上線開始,它計算的連續產品從該列表。
  • tails xs給出開始不同的初始值的所有子集:

    > tails [4,5,3,1,5,3,2,3,5] 
    [[4,5,3,1,5,3,2,3,5],[5,3,1,5,3,2,3,5],[3,1,5,3,2,3,5],[1,5,3,2,3,5],[5,3,2,3,5],[3,2,3,5],[2,3,5],[3,5],[5],[]] 
    
  • 從這些尾巴,我們只需要那些長至少5個元素。
  • 然後我們zip他們與自然數,這樣我們有起始索引與它相關聯。
  • 從每個子集我們採取前五個元素。
  • 將這五個元素傳遞給multiply函數。那些產品減少到一個單一的數字。
  • 之後,我們回到最後一行,我們按照產品價值降序對列表進行排序。
  • 從結果列表中我們只取第一個元素。
  • 然後我們輸出結果,即我的輸入數據爲(5,450)
5楼
0
0

想用最大一個襯層,沒有最大嘗試這種

from numpy import prod 
l=[2,6,7,9,1,4,3] 
max([prod(l[i:i+5]) for i in range(len(l))]) 
sorted([prod(l[i:i+5]) for i in range(len(l))])[-1] // without max 
+0

max禁止:)。 –

+0

@ B.M。我更新了我的代碼,希望你喜歡它 –

6楼
0
0

該解決方案使用reduce計算5-價值的產品,列表修真產生所有這些產品,元組創造了具有指標去與每一個,reduce再次得到最好的元組。

if else運算符用於在輸入中沒有5個值時捕捉該案例。

from functools import reduce 

def find_products(values): 
    return None if len(values) < 5 else reduce(
     lambda best, this: this if this[1] > best[1] else best, 
     [(i, reduce(lambda a,b: a*b, values[i:i+5], 1)) for i in range(0, len(values)-4)] 
    ) 

result = find_products([1, 0, 8, 3, 5, 1, 0, 2, 2, 3, 2, 2, 1]) 
print (result) 

輸出爲例如呼叫:

(7, 48) 
7楼
0
0

勢在必行範式往往是:

state = state0 
while condition: 
    # change state 

這是編程很多人的「自然」的方式,你知道如何這樣做。

functional paradigm禁止變量,這有一些優勢。它適用於通過參數(IN)和返回值(OUT)進行通信的函數。它經常使用遞歸函數。

的通用功能性遞歸方案爲:

f = lambda *args : result(*args) if condition(*args) else f(*newparams(*args)) 

在這裏,我們可以找到與(l,i,imax,prodmax)溶液作爲參數,並且:

condition = lambda l,i,_,__ : i>=len(l)-5   

result = lambda _,__,*args : args 

newparams = lambda l,i,imax,prodmax: (l, i+1, imax, prodmax)  
      if l[i]*l[i+1]*l[i+2]*l[i+3]*l[i+4] <= prodmax  
      else (l, i+1, i, l[i]*l[i+1]*l[i+2]*l[i+3]*l[i+4]) 

無以外的功能已被定義。

您甚至可以定義沒有這樣做的函數,例如參見here,但可讀性受損甚至更多。

執行命令

In [1]: f([random.randint(0,9) for i in range (997)],0,0,0) 
Out[1]: (386, 59049)     

Python的限制通過遞歸深度設置爲2000這種方法,並從Python 3中,由模塊functools在隱藏的功能的工具。

8楼
0
0

使用recursion

首先,我們需要創建一個純Python的解決方案一recursivefunction找到的product一個list

def product(l, i=0, s=1): 
    s *= l[i] 
    if i+1 < len(l): 
     return product(l, i+1, s) 
    return s 

,我們可以爲做一些測試:

>>> product([1, 2, 3]) 
6 
>>> product([1, 1, 1]) 
3 
>>> product([2, 2, 2]) 
8 

然後,我們可以用這個function在另一個recursivefunction解決你的問題:

def find_products(l, i=0, t=(0, -1)): 
    p = product(l[i:i+5]) 
    if p > t[1]: 
     t = (i, p) 
    if i+5 < len(l): 
     return find_products(l, i+1, t) 
    return t 

其作品!

這裏有一些測試,以證明它的工作:

>>> find_products([1, 1, 5, 5, 5, 5, 5, 1, 1]) 
(2, 3125) 
>>> find_products([1, 1, 1, 1, 1, 0, 0, 0, 0]) 
(0, 1) 
>>> find_products([1, 4, 5, 2, 7, 9, 3, 1, 1]) 
(1, 2520) 
+0

你請求了一些反饋。這段代碼看起來很合理。您最終會遇到Python中最大遞歸深度的問題。另外,在Python中調用函數的開銷不可忽略,因爲它們都是虛擬的。所以我會認爲使用'reduce'和'map'會更快,更容易閱讀。我仍然不明白OP的動機。 –

+0

@MartinUeding是的,我沒有考慮最大遞歸深度優點。我同意,OP要的是不實際的 –

0
votes
answers
22 views
+10

過濾但屬性和子實體屬性

1

我爲構建搜索邏輯的動態表達式樹遇到了一個小問題。爲實體自己的屬性創建一個表達式樹工作正常,但我不知道如何添加一個表達式,它將按照子實體屬性進行過濾。過濾但屬性和子實體屬性

這是我的任務實體:

public class Task: Entity 
{ 
    public TaskType Type { get; set; } 
    public TaskPriority Priority { get; set; } 
    public int ProjectId { get; set; } 
    public Project Project { get; set; } 
} 

這裏是項目實體:

public class Project: Entity 
{   
    public int CustomerId { get; set; } 
    public Customer Customer { get; set; } 
} 

和邏輯構建動態表達:

public Func<TaskItem, bool> Build(IList<Filter> filters) 
{ 
    ParameterExpression param = Expression.Parameter(typeof(TaskItem), "task"); 
    List<Filter> priorityFilter = FilterFilters(filters, "Priority"); 
    List<Filter> typeFilter = FilterFilters(filters, "Type"); 
    List<Filter> customerFilter = FilterFilters(filters, "CustomerId"); 

    Expression expression = null; 

    // BuildExpression is a method which simply creates expression which is using Tasks properties (like Type or Priority) 
    expression = BuildExpression(param, priorityFilter, expression); 
    expression = BuildExpression(param, typeFilter, expression); 

    // This part need's to be reworked 
    ParameterExpression projectParam = Expression.Parameter(typeof(Project), "project"); 
    Expression projectCustomerExpression = Expression.Equal(Expression.PropertyOrField(projectParam, "CustomerId"), Expression.Constant(customerFilter[0].Value)); 
    Expression customerExpression = Expression.Equal(Expression.PropertyOrField(param, "Project"), projectCustomerExpression); 
    Expression finall = expression != null ? Expression.AndAlso(expression, projectCustomerExpression) : projectCustomerExpression;   
    // End of filtering by CutomerId 

    return Expression.Lambda<Func<TaskItem, bool>>(finall, param).Compile(); 
} 

我不知道怎麼樣通過CustomerId進行過濾。上面代碼標記爲This part need's to be reworked的部分可能是錯誤的,或者至少是其最後部分。這個想法是擴展現有的表達式(這個由BuildExpression方法構建的表達式)和一個將由CustomerId過濾的表達式。

我已經在這方面失去了一些時間,嘗試自己尋找答案,但沒有結果。

任何幫助?

沙发
0
2

由於您提供了最少的代碼,因此如何創建實際表達式是未知的。所以,我會嘗試爲這種情況提供一個通用配方。

如果你想過濾的Task列表,那麼你仍然需要使用Task類型相同??,就像你已經這樣做:

ParameterExpression param = Expression.Parameter(typeof(TaskItem), "task"); 

沒有必要創建Project類型的其他??即使您想過濾Project的屬性。相反,你只需要重用前者??。需要注意的是,如果我們建立一個靜態謂詞像下面,這也是我們也不使用不同的參數表達的情況:

queryableTask.Where(t => t.Priority == TaskPriority.High && t.Project.CustomerId == 123); 

我們動態地建立在導航(子)屬性篩選,關鍵是以正確形成左表達式(即導航屬性的表達式)。

可以說我們的導航屬性是用點符號表示的:Project.CustomerId。然後,我們可以做這樣的事情,以創建左表達財產:

// We already have the following commented properties 
// prop = "Project.CustomerId"; 
// ParameterExpression param = Expression.Parameter(typeof(TaskItem), "task"); 
var leftExpr = prop.Split('.') 
        .Aggregate<string, MemberExpression>(null, 
         (acc, p) => acc == null 
          ? Expression.Property(param, p) 
          : Expression.Property(acc, p)); 

然後你就可以做其他像一個正常的特性,例如創建正確表達,並將其與另一種表達結合定義運算符(等於,不等於等)。

希望這會有所幫助。

+0

謝謝 - 你救了我的一天!但是當我像這樣調用ToList()時,我得到「對象引用未設置爲對象的實例」:'Context.Tasks.Where(searchCondition).ToList()'(搜索條件包含表達它是'IQueryable ')。堆棧跟蹤:在System.Linq.Enumerable的System.Linq.Enumerable.WhereEnumerableIterator1.ToList()處的lambda_method(Closure,Task)處。ToList [TSource](IEnumerable1 source)'。 任何想法? –

+1

@DawidRutkowski很可能'Project'是'null'。如果你想填充'IQueryable ',你最好改變方法簽名來返回'Expression >'並移除'Compile()'調用。目前,即使您的源代碼是'IQueryable ',編譯器也會調用'IEnumerable '上的Where'方法。 –

+1

@DawidRutkowski雖然我不確定,但是可能的原因會像@IvanStoev指出的那樣。如果你在'searchCondition'上使用'.Compile',那麼你不必這樣做,除非你想避免延遲加載。相反,您可以直接將'searchCondition'應用於'IQueryable'數據,然後'ToList'來枚舉。如果這不起作用,那麼可以嘗試包括導航屬性路徑(不包括路徑中的最後一個屬性;即簡單類型的實際屬性)以強制連接。 –

0
votes
answers
19 views
+10

高階「解決方案」謂詞

4

我正在使用更高階的Prolog變體,缺少findall高階「解決方案」謂詞

關於在這裏實施我們自己的findall還有另一個問題:Getting list of solutions in Prolog

低效的實現是:

parent(pam, bob). %pam is a parent of bob 
parent(george, bob). %george is a parent of bob 

list_parents(A, Es, [X|Xs]) :- 
    parent(X, A), 
    + member(X, Es), 
    list_parents(A, [X|Es], Xs). 
list_parents(A, Es, []). 

高效一個

需要一個 「解決方案」 較高階謂詞:

list_parents(X, Ys) :- solutions(parent, [X, W], 1, Ys) 

什麼是solutions?我可以在更高階的lambda Prolog中實現我自己的solutions謂詞嗎?

沙发
0
3

,如果findall/3沒有用,你可以通過動態 數據庫實現它,例如。

例如,對於具體使用情況的家長:

 
list_parents(_) :- 
     parent(P, _), 
     assertz(parent(P)), 
     false. 
list_parents(Ps) :- 
     phrase(retract_parents, Ps). 

retract_parents --> 
     ( { retract(parent(P)) } -> 
      [P], 
      retract_parents 
     ; [] 
     ). 

樣品查詢:

 
?- list_parents(Ps). 
Ps = [pam, george]. 

您可以sort/2結合本作漸近最優的性能,避免了二次開銷「天真「的解決方案,以消除重複。

謹防不過:首先,這是不 線程安全。爲了使其線程安全,您需要添加更多有關當前 線程的信息。

其次,如果實現全面findall/3這樣,你必須採取的嵌套findall/3呼叫護理。要做到這一點

一種方法是發出兩個種條款

  • solution(S),如solution(parent(pam)),表明是經由最近findall/3通話回溯找到了一個具體的解決方案
  • mark ,表示新的findall/3從這裏開始

收集解決方案時,只需p最後一次出現在mark

請參閱Richard O'Keefe的書對這些問題的一個很好的介紹。

+1

是否有意義反映找到的解決方案的順序? – false

板凳
0
3

如果您的Prolog有某種非backtrackable分配的,就像SWI-Prolog的'global' variables,你可以實現(注意,頭腦簡單的代碼)以這樣的方式

:- meta_predicate solutions(0, ?). 
:- meta_predicate solutions(+, 0, ?). 

solutions(G, L) :- 
    solutions(G, G, L). 

solutions(P, G, L) :- 
    (nb_current(solutions_depth, C) -> true ; C=1), 
    D is C+1, 
    nb_setval(solutions_depth, D), 
    atom_concat(solutions_depth_, D, Store), 
    nb_setval(Store, []), 
    ( G, 
     nb_getval(Store, T), 
     nb_setval(Store, [P|T]), 
     fail 
    ; nb_getval(Store, R) 
    ), 
    nb_delete(Store), 
    nb_setval(solutions_depth, C), 
    reverse(R, L). 

的「全局」變量導致用法更高效的執行WRT動態數據庫(assert/retract),以及(在SWI-prolog中)甚至可以在多線程應用程序中使用。

編輯

由於@false評論,移動的切割(多個)之前反向/ 2,並且引入了一個堆棧重入調用:例如

?- solutions(X-Ys,(between(1,3,X),solutions(Y,between(1,5,Y),Ys)),S). 
S = [1-[1, 2, 3, 4, 5], 2-[1, 2, 3, 4, 5], 3-[1, 2, 3, 4, 5]]. 

編輯

下面是解決方案/ 3的變體,按順序構建結果列表,以避免最終的反向/ 2調用。將結果添加到列表尾部有點棘手...

solutions(P, G, L) :- 
    (nb_current(solutions_depth, C) -> true ; C=1), 
    D is C+1, 
    nb_setval(solutions_depth, D), 
    atom_concat(solutions_depth_, D, Store), 
    ( G, 
     (nb_current(Store, U/B) -> B = [P|R], Q = U/R ; Q = [P|T]/T), 
     nb_setval(Store, Q), 
     fail 
    ; (nb_current(Store, L/[]) -> true ; L = []) 
    ), 
    nb_delete(Store), 
    nb_setval(solutions_depth, C). 
0
votes
answers
13 views
+10

如何使用map reduce來創建熊貓數據框?

0

我一直在尋找的代碼此頁上:如何使用map reduce來創建熊貓數據框?

https://ahmedbesbes.com/how-to-mine-newsfeed-data-and-extract-interactive-insights-in-python.html

news = pd.DataFrame(reduce(lambda x,y: x+y ,map(lambda r: r['articles'], responses))) 

有人可以解釋這一行?這裏的地圖/縮小操作是做什麼的?

沙发
0
2

lambda它只是一個函數。並且map將在列表中的每個元素中應用該函數。 reduce將根據該函數將列表設置爲單個值。

此操作描述一個小例子,

In [2]: res 
Out[2]: 
[{'articles': 124, 'other': 234}, 
{'articles': 124, 'other': 234}, 
{'articles': 124, 'other': 234}] 

In [3]: map(lambda r: r['articles'], res) 
Out[3]: [124, 124, 124] 

In [4]: reduce(lambda x,y:x+y,[124, 124, 124]) 
Out[4]: 372 

希望你能理解這一點,

0
votes
answers
43 views
+10

AWS Lambda JavaCompiler實例

0

在AWS Lambda Java 8功能中,是否可以獲得SystemJavaCompiler的實例?這裏有一個片段:AWS Lambda JavaCompiler實例

final File root = new File("/tmp");  
final File sourceFile = new File(root, type.getSourceFilename()); 

sourceFile.getParentFile().mkdirs(); 

Files.write(sourceFile.toPath(), templateString.getBytes(StandardCharsets.UTF_8)); 

final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
compiler.run(null, null, null, sourceFile.getPath()); 

我試圖動態編譯源代碼的Lambda和ToolProvider.getSystemJavaCompiler()拋出一個NullPointerException。這在當地很有用。我希望避免部署EC2實例以從Lambda的資源節省中受益。

+2

也許沒有SDK,JRE只有 – Antoniossss

+0

我剛剛意識到這一點:( – hisdrewness

+0

@Antoniossss提交您的評論作爲答案,所以我可以接受它 – hisdrewness

沙发
0
1

也許沒有SDK,只有JRE。

0
votes
answers
27 views
+10

如何在python中使用矩陣和向量的reduce/lambda函數?

0

我正在嘗試使用函數式編程來編寫以下函數。如何在python中使用矩陣和向量的reduce/lambda函數?

def mv(A,X,n): 
    Y = [0]*n 
    for i in range(n): 
     for j in range(n): 
      Y[i] += A[i][j] * X[j] 
    return Y 

減法函數可以將一個向量乘以一個矩陣嗎?因爲這是我在這裏要做的。我正在嘗試將矩陣A與矢量X相乘,但收到錯誤。錯誤是:

TypeError: 'function' object is not iterable

def mv(A,X,n): 
    return list(map(sum,lambda x, y: x*y(A, X))) 

要輸入:

A = [[1,2],[3,4]] 
X = [1,2] 
n = 2 
print(mv(A,X,n)) 

輸出應該是:

[5,11] 
+0

什麼錯誤你得到? –

+0

TypeError:'函數'對象不可迭代 – ce1

+0

正如所料。 'map'的第二個參數是一個可迭代的非函數,所以你必須通過你的列表而不是'lambda' –

沙发
0
1

使用列表推導這裏有一個快速和骯髒的解決方案,如果你想要堅持功能結構(在map和之上的Python中受到理解):

import operator as op 
x = [[1],[2],[3]] # Notice the dimensions! 
A = [[1,1,1], 
    [2,2,2], 
    [3,3,3]] 

def matrix_mult(A, X): 
    return [ 
     [sum(map(op.mul, row, col)) for col in zip(*X)] 
     for row in A 
    ] 

在行動中看到:

In [17]: A 
Out[17]: [[1, 1, 1], [2, 2, 2], [3, 3, 3]] 

In [18]: x 
Out[18]: [[1], [2], [3]] 

In [19]: matrix_mult(A, x) 
Out[19]: [[6], [12], [18]] 
+0

我是否在搞東西? - https://eval.in/921279 – splash58

+0

@ splash58對不起,什麼? –

+0

eval上的代碼看起來更容易,不需要改變向量和結果的結構。但我不使用python,所以可能不知道你爲什麼選擇另一種方式 – splash58

0
votes
answers
35 views
+10

啓用X射線對lambda函數進行主動跟蹤

2

我正在嘗試將活動跟蹤添加到2個lambda函數中,一個在Node中,另一個在Python中。 我的服務角色擁有的所有XRayWriteAccess權限,我點擊高級>啓用活動追蹤,請參閱權限信息,點擊保存,並看到:啓用X射線對lambda函數進行主動跟蹤

enter image description here

網絡搜索沒有返回任何結論,任何想法?

+0

嘗試使用AWS CLI啓用跟蹤,看看會產生什麼樣的輸出:'AWS拉姆達最新情況:功能配置 - 功能名稱 --tracing-config Mode = Active' – hjpotter92

+0

令人驚訝的是,此命令的唯一作用是啓用沒有打嗝的跟蹤。如果你想要點,讓它成爲答案?以下是輸出,已清理:https://gist.github.com/xShirase/8c1a421b056272520388e3039cc27c21 – xShirase

沙发
0
3

您的Web控制檯可能是預填一些表單域(我責怪它的瀏覽器)。如果你只是想使X射線主動跟蹤的功能,撥打電話到update-function-configuration與AWS CLI:

aws lambda update-function-configuration  
    --function-name <name>  
    --tracing-config Mode=Active