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: 31

0
votes
answers
20 views
+10

一旦某件事情完成,我該如何完全停止代碼?

-2

我已經排除了os.exit,sys.exit(),raise SystemExit(0),quitexit()一旦某件事情完成,我該如何完全停止代碼?

我想完全停止,一旦我的多個條件都滿足了。

while x: 
    #do something 
    #for loop 
    #if a: 
     #do something 
     print "Game over" 
     os.exit 
    #elif b: 
     #do something 
     print "Game over" 
     os.exit 
    break 

while y: 
    #(...same form as the previous one^) 

#get user input for the next turn 

#while 1 
#... 
#while n 

當我玩遊戲,而遊戲在消息被打印到屏幕上,它仍然是用戶輸入儘管被告知停止問。

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。 我們應該能夠將發佈的代碼粘貼到文本文件中,並重現您描述的問題。 – Prune

+1

如果使用'else if','while'循環將在'elif'內,這種情況下會自動中斷。 – Onyambu

+0

爲什麼不能使用'sys.exit()'? –

沙发
0
1

這是怎麼sys.exit()應該工作。如果您導入並達到它,Sys.exit()應該可以工作。也許更多的故障排除信息會有幫助?這適用於Python和python3

#!/usr/bin/env python 

import sys 

while 1==1: 
    print("This will print") 

    if 2==2: 
     print("This will also print") 
     sys.exit() 

    print("This will not print") 
print("This will not print") 

這是我的終端輸出:

Matts-MacBook-Pro:Desktop mw$ ./stupid.py 
This will print 
This will also print 

編輯。

正如@goosfraba所說,sys.exit(0)可能是最佳實踐。提供的The link表示沒有參數可以有未定義的行爲。像1或「這是一個錯誤信息」的另一個參數也會起作用。

+0

解決!謝謝。順便說一下,不錯的文件名。 – user7091717

板凳
0
0

有了這些小改動,我設法使這項工作:

import os 

while True: 
    #do something 
    #for loop 
    if False: 
     #do something 
     print "Game over A" 
     os._exit(0) 
    elif True: 
     #do something 
     print "Game over B" 
     os._exit(0) 
    break 

print "Not over" 

輸出:

Game over B 

注缺乏不高於輸出。 或許你需要_exit(<status>)

+0

雖然技術上有效,但常規的「sys.exit」也應該如此。有'os._exit'的合法用途,但在這裏使用它似乎是一個壞主意。 – user2357112

+0

很抱歉,我知道有人投下我的迴應,因爲它與你的相似。問題是我仍然在輸入我的解決方案,但你已經發布了你的解決方案。但是,如果你看看上面的評論,我確實提到了「if else」語句的使用 – Onyambu

+0

如果您有與您的答案有關的評論,請將其發佈到那裏,而不是在這裏。我不是那個倒票的人。 – Prune

地板
0
0

你應該使用:

sys.exit(n) 

,其中可選的n是退出狀態的整數。

請檢查:https://docs.python.org/2/library/sys.html

0
votes
answers
13 views
+10

matplotlib數據點之間的相等間距

1

我正在嘗試繪製一些數據,其中x軸顯示數據點之間的等距間距。matplotlib數據點之間的相等間距

代碼:

#!/usr/bin/env python 
from matplotlib import pyplot as plt 

sizes = [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700] 
prices = [245, 312, 279, 308, 199, 219, 405, 324, 319, 255] 

plt.xlim([1000, 2500]) 
plt.ylim([0, 500]) 
plt.xlabel("sizes") 
plt.ylabel("prices") 

plt.scatter(sizes, prices) 
plt.show() 

如何看起來: enter image description here 我多麼希望它看起來:

https://www.kdnuggets.com/2017/04/simple-understand-gradient-descent-algorithm.html

所以每兩個相鄰之間的距離分相等。

+2

這似乎沒有多大意義。如果x軸是一個帶有單位的軸,並且你確實有相應的值(這裏是「尺寸」),那麼完整的情節就會按照你的要求進行僞造。 – ImportanceOfBeingErnest

沙发
0
2

所以,看起來你的圖只是爲了表示的目的。 x軸上的數字不需要按比例。爲了繪製這個圖表,您必須創建一個實際按比例縮放的軸列表,並用您的sizes列表中的元素替換其標籤。下面的代碼顯示瞭如何做到這一點

#!/usr/bin/env python 
from matplotlib import pyplot as plt 

sizes = [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700] 
prices = [245, 312, 279, 308, 199, 219, 405, 324, 319, 255] 

plt.ylim([0, 500]) 
plt.xlabel("sizes") 
plt.ylabel("prices") 

x = [a for a in range(len(sizes))] 
plt.scatter(x,prices) 
plt.xticks(x, sizes) 
plt.show() 
+0

原來,這並沒有太大的意義,但你的答案是正確的。謝謝! – cie

0
votes
answers
9 views
+10

熊貓在時間序列中填寫缺失日期

1

我有一個數據幀,它有幾天的聚合數據。我想在失蹤幾天添加熊貓在時間序列中填寫缺失日期

我下面的另一篇文章,Add missing dates to pandas dataframe,不幸的是,它重寫了我的結果(也許功能微微一變?)...的代碼如下

import random 
import datetime as dt 
import numpy as np 
import pandas as pd 

def generate_row(year, month, day): 
    while True: 
     date = dt.datetime(year=year, month=month, day=day) 
     data = np.random.random(size=4) 
     yield [date] + list(data) 

# days I have data for 
dates = [(2000, 1, 1), (2000, 1, 2), (2000, 2, 4)] 
generators = [generate_row(*date) for date in dates] 

# get 5 data points for each 
data = [next(generator) for generator in generators for _ in range(5)] 

df = pd.DataFrame(data, columns=['date'] + ['f'+str(i) for i in range(1,5)]) 

# df 
groupby_day = df.groupby(pd.PeriodIndex(data=df.date, freq='D')) 
results = groupby_day.sum() 

idx = pd.date_range(min(df.date), max(df.date)) 
results.reindex(idx, fill_value=0) 

結果前填充缺失的日期指數
enter image description here

結果後
enter image description here

+1

也許你正在尋找重採樣呢? –

+0

它看起來很有前途,但我努力從文檔中應用它 – Alter

+0

我想我明白了...... 'df.set_index(df.date,inplace = True)'+'df = df.resample('D ').sum()' 這很方便 – Alter

沙发
0
3

您需要使用period_range而非date_range

In [11]: idx = pd.period_range(min(df.date), max(df.date)) 
    ...: results.reindex(idx, fill_value=0) 
    ...: 
Out[11]: 
        f1  f2  f3  f4 
2000-01-01 2.049157 1.962635 2.756154 2.224751 
2000-01-02 2.675899 2.587217 1.540823 1.606150 
2000-01-03 0.000000 0.000000 0.000000 0.000000 
2000-01-04 0.000000 0.000000 0.000000 0.000000 
2000-01-05 0.000000 0.000000 0.000000 0.000000 
2000-01-06 0.000000 0.000000 0.000000 0.000000 
2000-01-07 0.000000 0.000000 0.000000 0.000000 
2000-01-08 0.000000 0.000000 0.000000 0.000000 
2000-01-09 0.000000 0.000000 0.000000 0.000000 
2000-01-10 0.000000 0.000000 0.000000 0.000000 
2000-01-11 0.000000 0.000000 0.000000 0.000000 
2000-01-12 0.000000 0.000000 0.000000 0.000000 
2000-01-13 0.000000 0.000000 0.000000 0.000000 
2000-01-14 0.000000 0.000000 0.000000 0.000000 
2000-01-15 0.000000 0.000000 0.000000 0.000000 
2000-01-16 0.000000 0.000000 0.000000 0.000000 
2000-01-17 0.000000 0.000000 0.000000 0.000000 
2000-01-18 0.000000 0.000000 0.000000 0.000000 
2000-01-19 0.000000 0.000000 0.000000 0.000000 
2000-01-20 0.000000 0.000000 0.000000 0.000000 
2000-01-21 0.000000 0.000000 0.000000 0.000000 
2000-01-22 0.000000 0.000000 0.000000 0.000000 
2000-01-23 0.000000 0.000000 0.000000 0.000000 
2000-01-24 0.000000 0.000000 0.000000 0.000000 
2000-01-25 0.000000 0.000000 0.000000 0.000000 
2000-01-26 0.000000 0.000000 0.000000 0.000000 
2000-01-27 0.000000 0.000000 0.000000 0.000000 
2000-01-28 0.000000 0.000000 0.000000 0.000000 
2000-01-29 0.000000 0.000000 0.000000 0.000000 
2000-01-30 0.000000 0.000000 0.000000 0.000000 
2000-01-31 0.000000 0.000000 0.000000 0.000000 
2000-02-01 0.000000 0.000000 0.000000 0.000000 
2000-02-02 0.000000 0.000000 0.000000 0.000000 
2000-02-03 0.000000 0.000000 0.000000 0.000000 
2000-02-04 1.856158 2.892620 2.986166 2.793448 

這是因爲你的GROUPBY使用PeriodIndex,而不是日期時間:

df.groupby(pd.PeriodIndex(data=df.date, freq='D')) 

你可以有用來代替pd.Grouper

df.groupby(pd.Grouper(key="date", freq='D')) 

這將有一個日期時間索引。

板凳
0
2

c???s????的提示在評論:


resample那麼這裏適合。

Resample:用於時間序列的頻率轉換和重採樣的便利方法。對象必須具有類似日期時間的索引(DatetimeIndex,PeriodIndex或TimedeltaIndex),或將類似日期時間的值傳遞給on或level關鍵字。

import random 
import datetime as dt 
import numpy as np 
import pandas as pd 

def generate_row(year, month, day): 
    while True: 
     date = dt.datetime(year=year, month=month, day=day) 
     data = np.random.random(size=4) 
     yield [date] + list(data) 

# days I have data for 
dates = [(2000, 1, 1), (2000, 1, 2), (2000, 2, 4)] 
generators = [generate_row(*date) for date in dates] 

# get 5 points for each 
data = [next(generator) for generator in generators for _ in range(5)] 

# make dataframe 
df = pd.DataFrame(data, columns=['date'] + ['f'+str(i) for i in range(1,5)]) 

# using the resample method 
df.set_index(df.date, inplace=True) 
df = df.resample('D').sum().fillna(0) 

enter image description here

+0

你有一些奇特的編輯技巧,我甚至不知道你可以鏈接到評論 – Alter

+1

謝謝......認爲它會更容易鏈接到評論比我的個人資料;-) –

0
votes
answers
53 views
+10

在Keras中預測和評估指標

-1

模型培訓之後我如何預測和評估我的指標?
代碼是這樣的:在Keras中預測和評估指標

for patch in generator(): 
    pred = model.predict(np.array(patch, dtype=patch.dtype)) 

    loss_val_partial,accuracy_val_partial = model.test_on_batch(np.array(patch, dtype=patch.dtype),pred) 

或像這樣:

for patch in generator(): 
    pred = model.predict(np.array(patch, dtype=patch.dtype)) 

    loss_val_partial,accuracy_val_partial = model.test_on_batch(ground_truth,pred) 

其中地面實況是補丁的正確標籤。

我不認爲首先是正確的,因爲精度始終1.0

+0

如果它幫助,那麼請接受答案 – DAXaholic

沙发
0
2

在你的第一個代碼的問題是,你首先預測的輸出與您的模型,然後使用這個結果pred作爲地面實況供試品,讓你當然會擁有1.0

的精度爲test_on_batch方法見signature

test_on_batch(self, x, y, sample_weight=None) 

所以我不能測試它自己y的ou,因爲您只顯示了部分代碼(例如我不知道你的地面實況來自),但嘗試這樣的事情,也就是直接刪除,因爲它是內部爲你在做test_on_batch手動預測步驟:

for patch in generator(): 
    loss_val_partial,accuracy_val_partial = model.test_on_batch(np.array(patch, dtype=patch.dtype), ground_truth) 
+0

test_on_batch方法不會返回預測,因爲我需要預測和指標......這就是爲什麼我也使用預測的原因 – leoScomme

+0

是的,沒關係,但不要將您的預測作爲基礎事實傳遞,因爲這是錯誤的(您認爲自己的acc = 1.0) – DAXaholic

+0

好的,所以解決方案是你的,但如果我想要預測,我也必須添加預測方法,對不對? – leoScomme

0
votes
answers
24 views
+10

函數需要2個參數,但有3個參數?

-1

我對python 3(以及一般編程)非常陌生,而且我在理解爲什麼會發生這種情況時遇到了一些問題。函數需要2個參數,但有3個參數?

class calculator: 

    def addition(x, y): 
     added = x + y 
     print(added) 

    def subtraction(x, y): 
     sub = x - y 
     print(sub) 

    def multiplication(x, y): 
     mult = x * y 
     print(mult) 

    def division(x, y): 
     div = x/y 
     print(div) 

calc = calculator() 

calc.multiplication(3,5) 

,我發現了問題,這個問題:

Traceback (most recent call last): 
File "/Users/JordanM/Desktop/PythonFiles/Calculator.py", line 20, in <module> 
calc.multiplication(3,5) 

TypeError: multiplication() takes exactly 2 arguments (3 given) 

誰能給一些見解,爲什麼這是怎麼回事?有沒有更好的方法來做到這一點?

+0

您需要添加自我所有功能 – Vidya

+1

或每個方法上面的裝飾'@ staticmethod' – PRMoureu

+0

的主要問題是:爲什麼這是一個類? – Matthias

沙发
0
0

您需要將self添加到實例所使用的所有函數中。它在javascript中就像這樣。它指向當前的實例。

def addition(self,x, y): 
     added = x + y 
     print(added) 
+0

非常感謝! –

0
votes
answers
28 views
+10

Python - 在屏幕上打印用戶輸入

0

這是一個基本的簡單的Python問題..我想將該名稱作爲用戶的輸入並將其打印在屏幕上。我正在使用PyCharm社區版2017.2.3 IDE。我的代碼如下:Python - 在屏幕上打印用戶輸入

name=input("Enter your name ") 
print(name) 

我得到下面的錯誤。應該是一個非常簡單的解決方法..但沒有得到它...任何建議....我是新來的Python .....

C:Python27python.exe C:/Users/sourav/PycharmProjects/python_project/dummy1.py 
Enter your name Sourav 
Traceback (most recent call last): 
    File "C:/Users/sourav/PycharmProjects/python_project/dummy1.py", line 1, in <module> 
    name=input("Enter your name ") 
    File "<string>", line 1, in <module> 
NameError: name 'Sourav' is not defined 

進程退出代碼爲1

+0

使用的raw_input'()'給輸入爲 「Sourav」 用引號或您的輸入轉換爲字符串並顯示。 – bhansa

+0

感謝Bhansa和UrbanConor ...它實際上是版本問題....在Python版本2中,raw_input()被認爲是一個字符串,而input()將輸入作爲表達式運行。我不會在版本3中遇到這個問題。我使用的是版本2。 –

沙发
0
1

要麼使用完畢raw_input()這裏。

name = raw_input("Enter your name ") 
print(name) 

或者使用input

0
votes
answers
24 views
+10

Python的正則表達式:從一個字符串

-3

我是新來的正則表達式獲取貨幣數字,我試圖用re.findall提取貨幣般的數字(整數或1漂浮或2DP)從形式的字符串:Python的正則表達式:從一個字符串

'1000 - 2000' , '1000 -', '1000.4' 

我一直在努力尋找一個正則表達式模式,讓我從字符串的所有數字提取到一個單獨的列表,並希望在這個問題上的任何幫助。

例如,

import re 

pattern = '^d*[.,]?d*$' 
temp = ['1000.5 - 2000.55'] 
strings = re.findall('^d*[.,]?d*$', temp[0]) 

輸出我得到的是一個空列表,[]

我想獲得

strings = ['1000.5','2000.55'] 

,然後想將它們轉換爲浮動與

nums = [float(i) for i in strings] 
+2

你能提供樣品的輸入和預期的輸出?您的問題將被視爲*太寬泛*否則。 – ctwheels

+0

你是否也想用1個小數點的浮點數? – Marathon55

+0

此外,當你說'與2dp'你的意思是,如果你有一些像'1.123'你想獲得'1.12'或要忽略它完全這樣你沒有它的輸出顯示?此外,如果有'1.126',假設你要切斷這樣,你得到'1.12'最後一個數字:你想'1.12'或'1.13'的舍入值? – ctwheels

沙发
0
0
import re 

temp = ['1000.5 - 2000.55'] 
strings = re.findall('d+(?:[.,]d*)?', temp[0]) 
nums = [float(i) for i in strings] 
print(nums) # [1000.5, 2000.55] 

demo

板凳
0
0

你可以用[0-9.]+

import re 
pattern=r'[0-9.]+' 
temp = ['1000.5 - 2000.55'] 
for i in temp: 
    print(list(map(lambda x:float(x),re.findall(pattern,i)))) 

輸出:

[1000.5, 2000.55] 

你也可以做一個行:

print([list(map(lambda x:float(x),re.findall(pattern,i))) for i in temp][0]) 

輸出:

[1000.5, 2000.55] 
地板
0
0

你可以試試這個:

import re 
temp = ['1000.5 - 2000.55'] 
final_data = map(float, re.findall('d+.d+|d+', temp[0])) 

輸出:

[1000.5, 2000.55] 
0
votes
answers
24 views
+10

python azure中的PeekBatch

沙发
0
1

正如我知道,Azure的SDK爲Python包裹Azure的REST API,只有一個REST API來peek a message在同一時間,所以答案是否定的。

在Azure GitHub倉庫中存在一些問題,官方團隊建議使用AMQP而不是HTTP來查看郵件。

  1. Add support ReceiveBatch in servicebus.py
  2. ServiceBus Batch Receive support

希望它能幫助。

0
votes
answers
19 views
+10

在盛大兒童班致電祖父母方法

0

對不起,可能是這個愚蠢的問題,但它對我很困惑。讓我們假設我們有以下類別:在盛大兒童班致電祖父母方法

class A(): 
def say(self): 
    print("A") 

class B(A): 
def say(self): 
    print("B") 

class C(B): 
def say(self,*args, **kwargs): 
    return super(C, self).say(*args, **kwargs) 

我訪問父類的方法中的孩子,它打印B,但我想,我們都可以從B類訪問從A類訪問方法。

我知道我們可以在B班中加入super,但我不想修改B班。那麼是否有任何選項可以直接從A中獲得方法C

+0

可以直接調用方法,通過A.say(說A級) - 發言權內( )類C的方法。 –

+4

@PeterMajko你需要一個A的實例來做到這一點。桑傑 - 你爲什麼想要做這樣的事情?一方面你使用繼承,另一方面你試圖打破它。更好的帖子*你想完成什麼,而不是*你想要做什麼。可能有更好的方法來實現你的目標 – alfasin

+2

在C類中,你的say()方法可以通過'super(B,self)來訪問A,say()' –

沙发
0
0

可以通過調用A.say(self)這樣的:

class A(): 
    def say(self): 
     print("A") 

class B(A): 
    def say(self): 
     print("B") 

class C(B): 
    def say(self): 
     A.say(self) 
     B.say(self) 
     print("C") 

然後從終端對其進行測試:

>>> a = A() 
>>> a.say() 
A 
>>> b = B() 
>>> b.say() 
B 
>>> c = C() 
>>> c.say() 
A 
B 
C 

注:我放棄了argskwargs因爲AB類沒不會使用這些論據。如果你想使say採取那些一路上漲,雖然只需撥打A.say(self, *args, **kwargs)如果A.say回報的東西,你可以返回它太

+0

這可以工作,我認爲,作爲更一般的方法:超級(超級(self.__ class__,self),self).say(* args,** kwargs) –

44
votes
answers
23 views
+10

What is right batch normalization function in Tensorflow?

In tensorflow 1.4, I found two functions that do batch normalization and they look same:

  1. tf.layers.batch_normalization (link)
  2. tf.contrib.layers.batch_norm (link)

Which function should I use? Which one is more stable?

up vote 39 down vote accepted favorite
沙发
+390
+50

只是要添加到列表中,還有幾種方法可以在tensorflow中進行批處理規範:

  • tf.nn.batch_normalization 是一個低級操作。調用者負責處理 mean variance 張貼器本身。
  • tf.nn.fused_batch_norm 是另一個低級操作系統,類似於前一個操作系統。不同之處在於它針對4D輸入張量進行了優化,這是卷積神經網絡中的常見情況。<代碼> tf.nn。batch_normalization 接受任何等級大於1的張量。
  • tf.layers.batch_normalization 是以前操作系統的高級包裝器。最大的區別在於它負責創建和管理運行均值和方差張量,並在可能的情況下調用快速融合運算。通常,這應該是默認選擇
  • tf.contrib.layers.batch_norm 是批量規範的早期實現,之前是' s畢業於核心API(即 tf.layers )。建議不要使用它,因為它可能會在將來的版本中刪除。
  • tf.nn.batch_norm_with_global_normalization 是另一個棄用的操作。目前,委託調用 tf.nn.batch_normalization ,但將來可能會被刪除。
  • 最後,還有Keras層 keras.layers.BatchNormalization ,在tensorflow後端調用 tf.nn。

謝謝。我接受了。我只想問你關於均值和方差的問題。如上所述,我如何管理均值和方差?只需將is_training標誌設置為False? - KimHee '17年12月28日11:59

通過管理我的意思是:創建正確形狀的變量並累積來自批次的運行均值/方差。這有點單調乏味,這就是調用高級功能更容易的原因。在這種情況下,您只需要設置training屬性。 - - 格林2012年12月28日12:05

對於未來的讀者,本文很好地描述瞭如何手動管理均值/方差:r2rt.com/implementing-batch-normalization-in-tensorflow.html - Robert Lugg於18年7月12日16:40

+50

doc 所示, tf.contrib 是包含易失性或實驗性代碼的貢獻模塊。 function 完成後,它將從該模塊中刪除。現在有兩個,以便與歷史版本兼容。

因此,建議使用前 tf.layers.batch_normalization