我做了很多统计工作,并使用Python作为我的主要语言.我使用的一些数据集虽然可以占用20GB的内存,但这使得使用numpy,scipy和PyIMSL中的内存函数对它们进行操作几乎是不可能的.统计分析语言SAS在这里具有很大的优势,因为它可以对来自硬盘的数据进行操作而不是严格的内存处理.但是,我想避免在SAS中编写大量代码(出于各种原因),因此我试图确定我使用Python的选项(除了购买更多的硬件和内存).
我应该澄清一下像map-reduce这样的方法对我的大部分工作都无济于事,因为我需要对完整的数据集进行操作(例如计算分位数或拟合逻辑回归模型).
最近我开始玩h5py并认为这是我发现允许Python像SAS一样操作磁盘上的数据(通过hdf5文件),同时仍然能够利用numpy/scipy/matplotlib等的最佳选择.我想听听是否有人在类似设置中使用Python和h5py以及他们发现了什么.有没有人能够在迄今为止由SAS主导的"大数据"设置中使用Python?
编辑:购买更多硬件/内存当然可以提供帮助,但从IT角度来看,当Python(或R或MATLAB等)需要在内存中保存数据时,我很难将Python出售给需要分析大量数据集的组织.SAS继续在这里有一个强大的卖点,因为虽然基于磁盘的分析可能会更慢,但您可以放心地处理大量数据集.因此,我希望Stackoverflow可以帮助我弄清楚如何降低使用Python作为主流大数据分析语言的感知风险.
有没有办法为python多处理池中的每个worker分配一个唯一的ID,使得池中特定worker正在运行的作业可以知道哪个worker正在运行它?根据文档,a Process有一个name但是
该名称是一个字符串,仅用于识别目的.它没有语义.可以为多个进程指定相同的名称.
对于我的特定用例,我想在一组四个GPU上运行一堆作业,并且需要设置作业应该运行的GPU的设备编号.因为作业的长度不均匀,我想确保在上一个作业完成之前尝试在其上运行的作业的GPU上没有发生冲突(因此这不能预先为ID分配ID提前工作单位).
我试图在cython中创建一个函数,通过定义一个cython结构类型接受一个numpy结构化数组或记录数组.假设我有数据:
a = np.recarray(3, dtype=[('a', np.float32), ('b', np.int32), ('c', '|S5'), ('d', '|S3')])
a[0] = (1.1, 1, 'this\0', 'to\0')
a[1] = (2.1, 2, 'that\0', 'ta\0')
a[2] = (3.1, 3, 'dogs\0', 'ot\0')
Run Code Online (Sandbox Code Playgroud)
(注意:无论是否使用null终止符,都会出现下面描述的问题)
然后我有cython代码:
import numpy as np
cimport numpy as np
cdef packed struct tstruct:
np.float32_t a
np.int32_t b
char[5] c
char[3] d
def test_struct(tstruct[:] x):
cdef:
int k
tstruct y
for k in xrange(3):
y = x[k]
print y.a, y.b, y.c, y.d
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时test_struct(a),我收到错误:
ValueError: Expected a dimension of …Run Code Online (Sandbox Code Playgroud) 我刚开始使用scipy/numpy.我有一个100000*3阵列,每行是一个坐标,一个1*3中心点.我想计算数组中每行到中心的距离,并将它们存储在另一个数组中.最有效的方法是什么?
我正在寻找最基本的方法,根据序列中缺少的数字将数字列表拆分成较小的列表.例如,如果初始列表是:
seq1 = [1, 2, 3, 4, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
该函数将产生:
[[1, 2, 3, 4], [6, 7, 8, 9, 10]]
Run Code Online (Sandbox Code Playgroud)
要么
seq2 = [1, 2, 4, 5, 6, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
会导致:
[[1, 2], [4, 5, 6], [8, 9, 10]]
Run Code Online (Sandbox Code Playgroud) 我有一小部分现有的C代码,我想用Cython包装.我希望能够设置一些numpy数组,然后将这些数组作为参数传递给C代码,其代码的函数采用标准的c数组(1d和2d).在弄清楚如何编写正确的.pyx代码以正确处理事情方面,我有点陷入困境.
有一些函数,但文件funcs.h中的典型函数类似于:
double InnerProduct(double *A, double **coords1, double **coords2, const int len)
Run Code Online (Sandbox Code Playgroud)
然后我有一个.pyx文件,其中包含相应的行:
cdef extern from "funcs.h":
double InnerProduct(double *A, double **coords1, double **coords2, int len)
Run Code Online (Sandbox Code Playgroud)
我摆脱了const,因为cython不支持它.我陷入困境的是包装器代码应该看起来像是将MxN numpy数组传递给**coords1和**coords2参数.
我一直在努力为这类问题找到正确的文档或教程.任何建议都将非常感激.
我试图在Matplotlib中创建一个180度而不是360度的极坐标图,类似于MATLAB中的http://www.mathworks.com/matlabcentral/fileexchange/27230-half-polar-coordinates-figure-plot-function-halfpolar.有任何想法吗?
假设我有一些数据生成如下:
N = 20
m = 3
data = np.random.normal(size=(N,m)) + np.random.normal(size=(N,m))**3
Run Code Online (Sandbox Code Playgroud)
然后我创建一些分类变量:
indx = np.random.randint(0,3,size=N).astype(np.int32)
Run Code Online (Sandbox Code Playgroud)
并生成一个DataFrame:
import pandas as pd
df = pd.DataFrame(np.hstack((data, indx[:,None])),
columns=['a%s' % k for k in range(m)] + [ 'indx'])
Run Code Online (Sandbox Code Playgroud)
我可以得到每组的平均值:
df.groubpy('indx').mean()
Run Code Online (Sandbox Code Playgroud)
我不确定如何做的是然后减去原始数据中每列的每个组的平均值,以便每个列中的数据通过组内的平均值进行标准化.任何建议,将不胜感激.