小编mar*_*ama的帖子

如何使用#{variable}在Ruby中使用浮点格式化字符串?

我想格式化一个包含浮点变量的字符串,包括固定数量的小数,我想用这种格式化语法来做:

amount = Math::PI
puts "Current amount: #{amount}"
Run Code Online (Sandbox Code Playgroud)

而且我想获得Current amount: 3.14.

我知道我可以做到

amount = Math::PI
puts "Current amount %.2f" % [amount]
Run Code Online (Sandbox Code Playgroud)

但我问是否有可能这样做#{}.

ruby

67
推荐指数
4
解决办法
5万
查看次数

为什么我不能挑选一个打字.NamedTuple,而我可以挑选一个collections.namedtuple?

为什么我不能腌制一段typing.NamedTuple时间我可以腌制一个collections.namedtuple?我怎么能设法做一个泡菜NamedTuple

此代码显示了到目前为止我尝试过的内容:

from collections import namedtuple
from typing import NamedTuple

PersonTyping = NamedTuple('PersonTyping', [('firstname',str),('lastname',str)])
PersonCollections = namedtuple('PersonCollections', ['firstname','lastname'])

pt = PersonTyping("John","Smith")
pc = PersonCollections("John","Smith")


import pickle
import traceback

try:
    with open('personTyping.pkl', 'wb') as f:
        pickle.dump(pt, f)
except:
    traceback.print_exc()
try:
    with open('personCollections.pkl', 'wb') as f:
        pickle.dump(pc, f)
except:
    traceback.print_exc()
Run Code Online (Sandbox Code Playgroud)

shell上的输出:

$ python3 prova.py 
Traceback (most recent call last):
  File "prova.py", line 16, in <module>
    pickle.dump(pt, f)
_pickle.PicklingError: Can't pickle <class 'typing.PersonTyping'>: attribute lookup PersonTyping on …
Run Code Online (Sandbox Code Playgroud)

python pickle namedtuple python-3.5

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

python输入模块中Set,FrozenSet,MutableSet和AbstractSet有什么区别?

我试图用类型注释我的代码但是当涉及到集合时我有点困惑.我在PEP 484中读到了一些观点:

注意:Dict,List,Set和FrozenSet主要用于注释返回值.对于参数,更喜欢下面定义的抽象集合类型,例如Mapping,Sequence或AbstractSet.

设置,重命名为AbstractSet.此名称更改是必需的,因为键入模块中的Set表示使用泛型的set().

但这没有用.

我的第一个问题是:Set,FrozenSet,MutableSet和AbstractSet之间的共性和区别是什么?

我的第二个问题是:如果我尝试,为什么?

from collections import FrozenSet
Run Code Online (Sandbox Code Playgroud)

我明白了

ImportError: cannot import name 'FrozenSet'
Run Code Online (Sandbox Code Playgroud)

我使用的是Python 3.4,我已经通过pip安装了mypy-lang.

python type-hinting python-3.x frozenset

10
推荐指数
2
解决办法
3394
查看次数

两个numpy数组的每对列之间的差异(如何更有效地执行)?

我正在尝试优化一些代码,通过分析我注意到这个特定的循环需要花费很多时间.你能帮我写得更快吗?

import numpy as np

rows_a, rows_v, cols = (10, 15, 3)
a = np.arange(rows_a*cols).reshape(rows_a,cols)
v = np.arange(rows_v*cols).reshape(rows_v,cols)

c = 0
for i in range(len(v)):
    D = ((a-v[i])**2).sum(axis=-1)
    c += D.min()

print(c)
Run Code Online (Sandbox Code Playgroud)

是否有任何numpy功能可以有效地做到这一点?

python arrays performance numpy

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

numpy.dot -&gt; MemoryError,my_dot -&gt; 非常慢,但有效。为什么?

我正在尝试计算两个大小分别为 (162225, 10000) 和 (10000, 100) 的 numpy 数组的点积。但是,如果我调用 numpy.dot(A, B) 则会发生 MemoryError 。然后,我尝试编写我的实现:

def slower_dot (A, B):
    """Low-memory implementation of dot product"""
    #Assuming A and B are of the right type and size
    R = np.empty([A.shape[0], B.shape[1]])
    for i in range(A.shape[0]):
        for j in range(B.shape[1]):
            R[i,j] = np.dot(A[i,:], B[:,j])
    return R
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但当然很慢。您知道 1)此行为背后的原因是什么以及 2)我如何规避/解决该问题吗?

我在一台配备 64 位、16GB 内存、运行 Ubuntu 14.10 的计算机上使用 Python 3.4.2(64 位)和 Numpy 1.9.1。

python arrays numpy

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