小编900*_*000的帖子

用于多处理的共享内存中的大型numpy数组:这种方法有问题吗?

多处理是一个很棒的工具,但不是那么直接使用大内存块.您可以在每个进程中加载​​块并将结果转储到磁盘上,但有时您需要将结果存储在内存中.最重要的是,使用花哨的numpy功能.

我已经阅读/ google了很多,并提出了一些答案:

在共享内存中使用numpy数组进行多处理

在多处理过程之间共享大型只读Numpy数组

Python多处理全局numpy数组

如何在python子进程之间传递大型numpy数组而不保存到磁盘?

等等

他们都有缺点:不那么主流的图书馆(sharedmem); 全局存储变量; 不太容易阅读代码,管道等

我的目标是在我的工作人员中无缝使用numpy而不用担心转换和事情.

经过多次试验,我想出了这个.它适用于我的ubuntu 16,python 3.6,16GB,8核心机器.与以前的方法相比,我做了很多"快捷方式".没有全局共享状态,没有需要转换为numpy inside worker的纯内存指针,作为进程参数传递的大型numpy数组等.

上面是Pastebin链接,但我会在这里放几个片段.

一些进口:

import numpy as np
import multiprocessing as mp
import multiprocessing.sharedctypes
import ctypes
Run Code Online (Sandbox Code Playgroud)

分配一些共享内存并将其包装成一个numpy数组:

def create_np_shared_array(shape, dtype, ctype)
     . . . . 
    shared_mem_chunck = mp.sharedctypes.RawArray(ctype, size)
    numpy_array_view = np.frombuffer(shared_mem_chunck, dtype).reshape(shape)
    return numpy_array_view
Run Code Online (Sandbox Code Playgroud)

创建共享数组并在其中放入一些内容

src = np.random.rand(*SHAPE).astype(np.float32)
src_shared = create_np_shared_array(SHAPE,np.float32,ctypes.c_float)
dst_shared = create_np_shared_array(SHAPE,np.float32,ctypes.c_float)
src_shared[:] = src[:]  # Some numpy ops accept an 'out' array where to store the …
Run Code Online (Sandbox Code Playgroud)

python numpy multiprocessing

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

TDD假定接口已经定义; 如何应对?

要在代码之前编写测试,您需要有一种方法来与代码进行交互.测试倾向于提前定义接口,以便可以编写测试.

但是,经常开发一个好的实现包括发明一组良好的组件间接口,多次调整和重新构建这些接口.在此期间,您要么继续重写测试代码的好部分,要么让测试落后于代码.

有没有最好的做法来缓解这种情况?

tdd

6
推荐指数
2
解决办法
597
查看次数

Python optparse,默认值和显式选项

采用以下相当标准的代码:

from optparse import OptionParser                         
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1)
options, args = opts.parse_args()
Run Code Online (Sandbox Code Playgroud)

假设-x并且-f是互斥的:当-x-f明确存在时,应报告错误.

如何检测是否-x明确存在?即使不是,也options列出默认值.

一种方法是避免设置我宁愿不会做的默认值,因为--help打印默认值很好.

另一种方法是检查其中sys.argv的实例-x是否有点尴尬,如果有多个名称-x(即, - long-name)并且有多对互斥选项.

它有一个优雅的解决方案吗?

python optparse

6
推荐指数
2
解决办法
8066
查看次数

Python中找不到文件错误

我确信之前已经回答了,但我找不到任何可以帮助我...

我正在尝试编写一个简单的程序来读取文件并搜索一个单词,然后打印该文件中找到该单词的次数.好吧,每当我输入"test.rtf"(这是我的文档的名称)时,我都会收到此错误...

Traceback (most recent call last):
  File "/Users/AshleyStallings/Documents/School Work/Computer Programming/Side Projects/How many? (Python).py", line 9, in <module>
    fileScan= open(fileName, 'r')  #Opens file
FileNotFoundError: [Errno 2] No such file or directory: 'test.rtf'
Run Code Online (Sandbox Code Playgroud)

在上学期的课堂上,我似乎记得我的教授说你必须将文件保存在特定的地方?我不确定他是否真的这么说,但是如果有帮助的话,我正在运行苹果OSx.哈哈

这是我的代码,任何帮助表示赞赏:)提前致谢!

print ("Hello! Welcome to the 'How many' program.")
fileName= input("Please enter the name of the file you'd like to use.  Make \
sure to include the correct extension!")  #Gets file name

fileScan= open(fileName, 'r')  #Opens file

cont = "Yes"
accumulator = 0

while cont == "Yes": …
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
2
解决办法
9万
查看次数

bash:如何更新隐式子shell中的关联数组?

问题:我无法在while循环中更新数组.插图(不是实际问题):

declare -A wordcounts
wordcounts["sentinel"]=1000
ls *.txt | while read f; do
  # assume that that loop runs multiple times
  wordcounts[$f]=$(wc -w  $f)
  echo ${wordcounts[$f]}  # this prints actual data
done
echo ${!wordcounts[@]}  # only prints 'sentinel'
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为管道在子shell中运行后循环.循环对变量所做的所有更改wordcounts仅在循环内可见.

export wordcounts没有用.

唉,我似乎需要管道while read部件,所以重写上面的代码的方法for并不是我想要的.

有没有合法的方法来更新循环中的关联数组形式,或者一般的子shell?

arrays bash loops associative-array subshell

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

如何使用Mongoengine删除嵌入式文档?

我有一个具有EmbeddedDocumentField的集合.我无法找到如何从集合中删除嵌入文档的示例.有人能为我提供一个例子或参考吗?

以下是我的设置:

  • Python 2.7.5
  • Django 1.5.5
  • MongoEngine 0.8.7

码:

class Merchant(Document):
    merchant_id = StringField(max_length=50)
    merchant_name = StringField(max_length=150)
    merchant_name_search_alias = StringField(max_length=150)
    website = StringField(max_length=150)
    location = ListField(EmbeddedDocumentField(Location))
    address = StringField(max_length=50)
    city = StringField(max_length=30)
    state = StringField(max_length=20)
    zipcode = IntField()
    phone_nummber = StringField(max_length=10)
    sub_lat = FloatField()
    sub_lng = FloatField()
    country = StringField(max_length=20)
    promotion = ListField(EmbeddedDocumentField(Promotion))


class Promotion(EmbeddedDocument):
    provider_name = StringField(max_length=50)
    provider_website = URLField()
    promo_name = StringField(max_length=300)
    promo_name_search_alias = StringField(max_length=100)
    retail_price = DecimalField(precision=2, force_string=True)
    discount_price = DecimalField(precision=2, force_string=True)
    deal_url = URLField()
    buy_url = …
Run Code Online (Sandbox Code Playgroud)

python django mongoengine

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

考虑滚动条调整<div>宽度

我有两个div要素; 其中一个侧面有滚动条:

+-------------+ ?
|  div A      | ?
+-------------+ ?
|             |^|
|             | |
|             | |
|   div B     |=|
|             | |
+-------------|v|
Run Code Online (Sandbox Code Playgroud)

我希望它的宽度div Adiv B 减去滚动条的宽度一样宽.滚动条始终存在(通过显式overflow: scroll).OTOH div A具有固定高度,不需要滚动.我想要客户区域div Adiv B对齐.

我可以使用JS进行人工滚动条控制.如果可能的话,我更喜欢基于CSS的本机外观解决方案.

?如果我知道滚动条的平台相关宽度是什么,我可以在图片上放置一个单独的填充.

有没有办法实现这一点,至少在现代浏览器中?

html css scrollbar

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

python decopt:“预期的字符串或缓冲区”

我正在使用decopt模块来处理python脚本选项:

from docopt import docopt
"""Usage:
  ./convert [ -h | -i | -t | -c ]

Options:
  -h          Show this help
  -i          Convert image to vertical scroll box
  -t          Convert text to vertical scroll box
  -c          Convert command list to html
"""

def main(docopt_args):
...
if __name__ == '__main__':
    args = docopt(__doc__, version='v0.1')
    main(args)




Traceback (most recent call last):
 File  "/home/ajn/Converter-yaml-to-html-blocks/convert.py", line 66, in <module>  
    args = docopt(__doc__, version='v0.1')   
 File   "/usr/local/lib/python3.4/dist-packages/docopt.py", line 558, in docopt  
    DocoptExit.usage = printable_usage(doc)
 File   "/usr/local/lib/python3.4/dist-packages/docopt.py", …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

如何在Python中下载zip文件并从中解析csv文件

我编写了一个脚本,它会点击 URL 并下载 zip 文件,然后解压缩。现在我在解析解压后得到的 CSV 文件时遇到问题。

import csv
from requests import get
from io import BytesIO
from zipfile import ZipFile

request = get('https://example.com/some_file.zip')
zip_file = ZipFile(BytesIO(request.content))
files = zip_file.namelist()
with open(files[0], 'r') as csvfile:
    csvreader = csv.reader(csvfile)
    for row in csvreader:
        print(row)
Run Code Online (Sandbox Code Playgroud)

python python-3.x

5
推荐指数
2
解决办法
4308
查看次数

为什么Data.Vector.Mutable read()由于其不可变的操作而在monad中返回?

在这里查看http://hackage.haskell.org/package/vector-0.12.0.3/docs/Data-Vector-Mutable.html 可以看到读取类型为:

read :: PrimMonad m => MVector (PrimState m) a -> Int -> m a
Run Code Online (Sandbox Code Playgroud)

由于读取操作不会修改向量,所以我的主要问题是为什么不这样做:

read :: PrimMonad m => MVector (PrimState m) a -> Int -> a
Run Code Online (Sandbox Code Playgroud)

可变向量的长度在向量上也做不可变的事情,其类型 MVector s a -> Int看起来很正常。不是PrimMonad m => MVector (PrimState m) a -> m Int。那么,为什么在读取和长度之间做出设计选择上的差异,因为它们都是向量上的不变操作?

现在我考虑一下,以某种方式读取返回的单元格是对向量内部单元格的引用,而不是其数据的副本吗?如果是这样,我怎么能以可变的向量很好且廉价地获得对第n个元素的不变访问?我正在学习haskell,但不太了解细节。

谢谢,

haskell vector

5
推荐指数
2
解决办法
64
查看次数