小编Ian*_*ore的帖子

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

我想在共享内存中使用numpy数组与多处理模块一起使用.困难是使用它像一个numpy数组,而不仅仅是一个ctypes数组.

from multiprocessing import Process, Array
import scipy

def f(a):
    a[0] = -a[0]

if __name__ == '__main__':
    # Create the array
    N = int(10)
    unshared_arr = scipy.rand(N)
    arr = Array('d', unshared_arr)
    print "Originally, the first two elements of arr = %s"%(arr[:2])

    # Create, start, and finish the child processes
    p = Process(target=f, args=(arr,))
    p.start()
    p.join()

    # Printing out the changed values
    print "Now, the first two elements of arr = %s"%arr[:2]
Run Code Online (Sandbox Code Playgroud)

这会产生如下输出:

Originally, the first two elements of arr = …
Run Code Online (Sandbox Code Playgroud)

python shared numpy multiprocessing

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

在通过管道读取stdin的脚本中使用pdb.set_trace()

我有一个python脚本通过管道读取标准输入,我似乎无法使用它与pdb.set_trace().

my_script.py:

#!/usr/bin/env python
import sys
import pdb

def main():
    for line in sys.stdin:
        print "Printing a line: " +line

if __name__=='__main__':
    status = main()
Run Code Online (Sandbox Code Playgroud)

假设tempfile.csv是一个有两行的文件,

$ cat tempfile.csv 
line1
line2
Run Code Online (Sandbox Code Playgroud)

然后我可以运行我的脚本:$ cat tempfile.csv | ./my_script.py,一切都很好:

$ cat tempfile.csv | ./my_script.py 
Printing a line:  line1

Printing a line:  line2
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我把pdb.set_trace()放在任何地方,那么我得到一个错误.例如,将pdb.set_trace()放在def main()下面,然后我得到

$ cat tempfile.csv | ./my_script.py 
> /home/ilangmore/mobiuss/TM/branches/hadooprotype/my_script.py(7)main()
-> for line in sys.stdin:
(Pdb) *** NameError: name 'line1' is not defined
(Pdb) *** NameError: name 'line2' is not defined
(Pdb) …
Run Code Online (Sandbox Code Playgroud)

python

33
推荐指数
3
解决办法
7834
查看次数

如何在csv中编写/读取pandas系列?

我无法弄清楚如何正确地编写/读取系列...以下(以及它的许多变体)导致读取系列与书面系列不同...请注意,该系列被读入DataFrame而不是比一系列.

In [55]: s = pd.Series({'a': 1, 'b': 2})

In [56]: s
Out[56]: 
a    1
b    2

In [57]: s.to_csv('/tmp/s.csv')

In [58]: !cat /tmp/s.csv
a,1
b,2

In [59]: pd.read_csv('/tmp/s.csv')
Out[59]: 
   a  1
0  b  2
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如何仅将csv文件中的特定列加载到DataFrame中

假设我有一个包含400列的csv文件.我无法将整个文件加载到DataFrame中(不适合内存).但是,我只想要50列,这将适合内存.我没有看到任何内置的Pandas方式来做到这一点.你有什么建议?我愿意使用PyTables接口或pandas.io.sql.

最好的情况是像pandas.read_csv(....,columns = ['name','age',...,'income'])这样的函数.即我们传递将要加载的列名(或数字)列表.

python csv pandas

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

numpy中的最佳(广播)矩阵划分.是否避免使用临时数组?

如果遵循某些广播规则,Numpy允许添加/倍增/分割不同大小的矩阵.此外,临时阵列的创建是numpy的主要速度障碍.

下面的timit结果让我感到惊讶......发生了什么事?

In [41]: def f_no_dot(mat,arr):
   ....:     return mat/arr

In [42]: def f_dot(mat,arr):
   ....:     denominator = scipy.dot(arr, scipy.ones((1,2)))
   ....:     return mat/denominator

In [43]: mat = scipy.rand(360000,2)

In [44]: arr = scipy.rand(360000,1)

In [45]: timeit temp = f_no_dot(mat,arr)
10 loops, best of 3: 44.7 ms per loop

In [46]: timeit temp = f_dot(mat,arr)
100 loops, best of 3: 10.1 ms per loop
Run Code Online (Sandbox Code Playgroud)

我认为f_dot会慢,因为它必须创建临时数组分母,我假设f_no_dot跳过了这一步.我应该注意,这些时间对于f_no_dot线性地(对于数组大小,长达10亿),并且对于f_dot稍微比线性更差.

python performance numpy

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

在Python中使用多线程blas实现和多处理是否值得?

假设我有一台16核机器和一个令人尴尬的并行程序.我使用大量的numpy dot产品和添加numpy数组,如果我不使用多处理,那将是一个明智的选择:确保numpy是针对使用多线程的blas版本构建的.但是,我正在使用多处理,所有核心都在努力工作.在这种情况下,使用多线程blas有什么好处吗?

大多数操作是(blas)类型1,有些是类型2.

python multithreading numpy multiprocessing blas

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

numpy Loadtxt函数似乎消耗了太多内存

当我使用numpy.loadtxt加载数组时,它似乎占用了太多内存.例如

a = numpy.zeros(int(1e6))
Run Code Online (Sandbox Code Playgroud)

导致内存增加约8MB(使用htop,或仅8bytes*1百万\大约8MB).另一方面,如果我保存然后加载此数组

numpy.savetxt('a.csv', a)
b = numpy.loadtxt('a.csv')
Run Code Online (Sandbox Code Playgroud)

我的内存使用量增加了大约100MB!我再次用htop观察到了这一点.这是在iPython shell中观察到的,也是在使用Pdb ++逐步执行代码时观察到的.

知道这里发生了什么吗?

在阅读了jozzas的回答之后,我意识到如果我提前知道数组大小,那么如果说"a"是一个mxn数组,则有更多内存有效的方法:

b = numpy.zeros((m,n))
with open('a.csv', 'r') as f:
    reader = csv.reader(f)
    for i, row in enumerate(reader):
        b[i,:] = numpy.array(row)
Run Code Online (Sandbox Code Playgroud)

python numpy out-of-memory

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