小编Whi*_*hia的帖子

十进制Python与浮点运行时

关于在使用这两种不同数据类型之间我应该期待什么样的运行时差异的一般问题.

我的测试:

test = [100.0897463, 1.099999939393,1.37382829829393,29.1937462874847272,2.095478262874647474]
test2 = [decimal.Decimal('100.0897463'), decimal.Decimal('1.09999993939'), decimal.Decimal('1.37382829829'), decimal.Decimal('29.1937462875'), decimal.Decimal('2.09547826287')]

def average(numbers, ddof=0):
    return sum(numbers) / (len(numbers)-ddof)

%timeit average(test)
%timeit average(test2)
Run Code Online (Sandbox Code Playgroud)

运行时间的差异是:
1000000次循环,最佳3:364 ns每循环
10000次循环,最佳3:每循环80.3μs

所以使用十进制比使用浮点数慢大约200倍.在确定使用哪种数据类型时,这种差异是否正常并且与我期望的一致?

python floating-point decimal

7
推荐指数
2
解决办法
6553
查看次数

不允许合并多个级别的重叠

所以,我正在使用熊猫,并且主要是尝试计算标准化的体重.对于我的数据框中的每一天,我希望'SECTOR'权重按'CAP'分组,但它们不会总和为1,所以我也要将它们标准化.我以为我可以除以2个groupbys做到这一点,但我发现我的代码中的错误,我不太明白.如果我消除第二组中的'CAP',代码就可以运行.

任何人都可以向我解释这个吗?

df.groupby(['EFFECTIVE DATE','CAP','SECTOR'])['INDEX WEIGHT'].sum() / df.groupby(['EFFECTIVE DATE','CAP'])['INDEX WEIGHT'].sum()

NotImplementedError: merging with more than one level overlap on a multi-index is not implemented
Run Code Online (Sandbox Code Playgroud)

有人知道我需要改变什么吗?一如既往地谢谢你!!!

python group-by pandas pandas-groupby

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

排列的等级

所以有一个问题我无法解决,主要是因为计算能力或缺乏。想知道如何编写这个代码以便我可以在我的计算机上实际运行它。问题的要点是:

假设您有一个 string 'xyz',并且您想要找到该字符串的所有唯一排列。'xyz'然后对它们进行排序并找到唯一排列的索引。这看起来很简单,但是一旦你得到一个很长的字符串,我的计算机就会放弃。我认为围绕这​​个问题的数学方法是什么,它会引导我编写出可以在我的笔记本电脑上实际运行的代码。

from itertools import permutations

def find_rank(n):
    perms = [''.join(p) for p in permutations(n)]
    perms = sorted(set(perms))
    loc = perms.index(n)
    return loc
Run Code Online (Sandbox Code Playgroud)

但如果我想在 100 个字母长的字符串上运行这段代码,我的计算机就无法处理。

python algorithm performance permutation combinatorics

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

大熊猫列表理解

我正在给一个玩具示例,但它会帮助我理解我正在尝试做的其他事情.假设我想要一个数据框'optimal_fruit'中的新列,即apple*orange - bananas.

我可以做这样的事情来获得它.

df2['optimal_fruit'] = df2['apples'] * df2['oranges'] - df2['bananas'] 


apples  oranges bananas optimal_fruit
1       6       11      -5
2       7       12      2
3       8       13      11
4       9       14      22
5       10      15      35
Run Code Online (Sandbox Code Playgroud)

如果我尝试做这样的事情会发生什么?我怎么能在列表理解中做到这一点?

df2['optimal_fruit'] = [x * y - z for x in df2['apples'] for y in df2['oranges'] for z in df2['bananas']]
Run Code Online (Sandbox Code Playgroud)

我得到一个错误:

ValueError:值的长度与索引的长度不匹配

一如既往,非常感谢你的帮助!

python list-comprehension pandas

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

Python打开json文件保存在内存中

问题,我有一个应用程序可以访问 json 文件中的数据。现在,每次应用程序需要数据时,我都会像这样打开和关闭文件。

def access_file():
    try:
        with open(my_file, 'r') as json_data:
            json_data = json.load(json_data)
            return json_data
    except FileNotFoundError:
        logging.error("my_file not found.")
Run Code Online (Sandbox Code Playgroud)

我认为连续多次打开和关闭此文件是不明智的。如果它没有打开,我如何只打开它一次并保持打开状态,然后我可以在需要时在内存中访问它。

json python-3.x

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

/ n美丽的汤文

我正在尝试获取一些用于NLP工作的youtube视频的成绩单,我想我可以做得很好,但也有一些问题.例如:

from xml.etree import cElementTree as ET
from bs4 import BeautifulSoup as bs
from urllib2 import urlopen

URL = 'http://video.google.com/timedtext?lang=en&v=KDHuWxy53uM'
def make_soup(url):
    html = urlopen(url).read()
    return bs(html, "lxml")

soup = make_soup(URL)
takeaways = soup.findAll('text')

All_text = []
for i in takeaways:
    root = ET.fromstring(str(i))
    reslist = list(root.iter())
    try:
        result = ' '.join([element.text for element in reslist])
    except:
        pass
    All_text.append(result)
Run Code Online (Sandbox Code Playgroud)

其中一行的示例结果:

'Let's learn a little bit\nabout the dot product.'
Run Code Online (Sandbox Code Playgroud)

这似乎可以获得成绩单,但我也得到/ n这是xml的返回字符,我也得到这个奇怪的字符代替撇号,我认为是由于编码?

谁知道我怎么能清理这两个?

python beautifulsoup

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

NaNs突然出现在sklearn KFolds身上

我正在尝试对我的数据集运行交叉验证.数据似乎很干净,但是当我尝试运行它时,我的一些数据被NaN取代.我不知道为什么.有没有人见过这个?

y, X = np.ravel(df_test['labels']), df_test[['variation', 'length', 'tempo']]
X_train, X_test, y_train, y_test = cv.train_test_split(X,y,test_size=.30, random_state=4444)
Run Code Online (Sandbox Code Playgroud)

这是我在KFolds之前看到的X数据: variation length tempo 0 0.005144 1183.148118 135.999178 1 0.002595 720.165442 117.453835 2 0.008146 397.500952 112.347147 3 0.005367 1109.819501 172.265625 4 0.001631 509.931973 135.999178 5 0.001620 560.365714 151.999081 6 0.002513 763.377778 107.666016 7 0.009262 502.083628 99.384014 8 0.000610 500.017052 143.554688 9 0.000733 269.001723 117.453835

我的Y数据看起来像这样: array([ True, False, False, True, True, True, True, False, True, False], dtype=bool)

现在当我尝试做十字架时:

kf = KFold(X_train.shape[0], n_folds=4, shuffle=True)

for train_index, …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn cross-validation

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

Java BigDecimal 除法

我在这里做错了什么?很确定这是正确的,我可以打印总数,但是在计算平均值时它会中断。

public static void main(String[] args) {

    BigDecimal test1 = new BigDecimal("67");
    BigDecimal test2 = new BigDecimal("76");
    BigDecimal test3 = new BigDecimal("99");
    BigDecimal test_count = new BigDecimal("3");
    BigDecimal total = test1.add(test2).add(test3);
    System.out.println(total);
    BigDecimal average = total.divide(test_count);
    System.out.println(average);

}
Run Code Online (Sandbox Code Playgroud)

抛出异常:

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
    at java.math.BigDecimal.divide(BigDecimal.java:1690)
    at HelloWorld.main(HelloWorld.java:31)
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

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