小编Mag*_*n88的帖子

可以dask parralelize读取一个csv文件?

我正在将大文本文件转换为hdf存储,希望能够更快地访问数据.转换工作正常,但是从csv文件读取并不是并行完成的.它真的很慢(对于SSD上的1GB文本文件需要大约30分钟,所以我的猜测是它不受IO限制).

有没有办法让它在parralel的多个线程中读取?Sice可能很重要,我目前被迫在Windows下运行 - 以防万一有所不同.

from dask import dataframe as ddf
df = ddf.read_csv("data/Measurements*.csv",
             sep=';', 
             parse_dates=["DATETIME"], 
             blocksize=1000000,
             )

df.categorize([ 'Type',
                'Condition',               
          ])

df.to_hdf("data/data.hdf", "Measurements", 'w')
Run Code Online (Sandbox Code Playgroud)

python csv pandas dask

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

如何使用通用浮点类型在cython中声明一个ndarray

如果它应该能够同时处理float和double,那么在cython中声明numpy数组的最佳方法是什么?

我想用内存视图是不可能的,因为数据类型是至关重要的,但是对于ndarray有什么方法可以给它一个通用浮点类型,这仍然有利于cython的快速性?

所以这就是我通常会做的事情:

def F( np.ndarray A):
    A += 10
Run Code Online (Sandbox Code Playgroud)

我已经看到还有:

def F( np.ndarray[np.float32_t, ndim=2] A):
    A += 10
Run Code Online (Sandbox Code Playgroud)

但这又会给这个类型增加一点尺寸.我还想过根据位大小(32或64)在函数内部创建内存视图.

任何想法都受到高度赞赏


非常感谢您对该floating类型的提示.我试过这样的

import numpy as np
cimport numpy as np
import cython
cimport cython
from libc.math cimport sqrt, abs
from cython cimport floating

@cython.boundscheck(False)
@cython.wraparound(False)
@cython.nonecheck(False)
def Rot_Matrix(np.ndarray[floating, ndim=3] Fit_X,
               np.ndarray[floating, ndim=3] Ref_X,
               weight = None):
    cdef:
        unsigned int t, T = Fit_X.shape[0]
        unsigned int n, N = Fit_X.shape[1]
        np.ndarray[floating, ndim=3] Rot = np.empty((T,3,3))

    return Rot
Run Code Online (Sandbox Code Playgroud)

当我现在用两个np.float32数组调用该函数时,我得到了错误

ValueError:Buffer …

python numpy cython

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

用于不规则间隔点的高斯和滤波器

我有一组点(x,y)作为两个向量x,y,例如:

from pylab import *
x = sorted(random(30))
y = random(30)
plot(x,y, 'o-')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我想用高斯来平滑这些数据,并仅在x轴上的某些(规则间隔)点处对其进行评估.让我们说:

x_eval = linspace(0,1,11)
Run Code Online (Sandbox Code Playgroud)

我得到了一个提示,这个方法被称为"高斯和滤波器",但到目前为止,我还没有在numpy/scipy中找到任何实现,尽管它看起来似乎是一个标准问题乍一看.由于x值不是等间距,我不能使用scipy.ndimage.gaussian_filter1d.

通常这种平滑是通过毛皮空间并与内核相乘来完成的,但我真的不知道这是否可以使用不规则间隔的数据.

谢谢你的任何想法

python numpy smooth gaussian scipy

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

如何将压缩(gz)CSV文件读入dask Dataframe?

有没有办法读取通过gz压缩到dask数据帧的.csv文件?

我直接尝试过

import dask.dataframe as dd
df = dd.read_csv("Data.gz" )
Run Code Online (Sandbox Code Playgroud)

但得到一个unicode错误(可能是因为它正在解释压缩的字节)有一个"compression"参数但compression = "gz"不起作用,到目前为止我找不到任何文档.

使用pandas我可以直接读取文件而不会产生问题,除了结果炸毁了我的记忆;-)但是如果我限制行数它可以正常工作.

import pandas.Dataframe as pd
df = pd.read_csv("Data.gz", ncols=100)
Run Code Online (Sandbox Code Playgroud)

python csv pandas dask

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

如何在C中检查ndarray的数据类型

谁能告诉我如何检查ndarray已传递给C代码的数据类型?

在具体的例子中,如果数组的数据类型是float32或,我想调用一个不同的函数double/float64.所以像

if( Dtype(MyArray) == NPY_FLOAT )
{
   DoSomething_float( MyArray );
}
else
{
   DoSomething_double( MyArray );
}
Run Code Online (Sandbox Code Playgroud)

我已经找到了

PyTypeNum_ISFLOAT(num)
PyDataType_ISFLOAT(descr)
PyArray_ISFLOAT(obj)
Run Code Online (Sandbox Code Playgroud)

在numpy C API中,但我不明白如何使用它们.我已经试图找到一个有启发性的例子,但没有找到.

c numpy

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

在一个太大的数组内部进行乘法和加法

我有一个形状(M,N)的数组A现在我想做手术

R = (A[:,newaxis,:] * A[newaxis,:,:]).sum(2)

它应该产生一个(MxM)数组.现在的问题是数组非常大,我得到一个内存错误,因为MxMxN数组不适合内存.

完成这项工作的最佳策略是什么?C?地图()?还是有特殊功能吗?

谢谢你,大卫

python numpy

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

结合两个切片操作

是否有一种智能且简单的方法将两个切片操作合二为一?

说我有类似的东西

arange(1000)[::2][10:20]
>>> array([20, 22, 24, 26, 28, 30, 32, 34, 36, 38])
Run Code Online (Sandbox Code Playgroud)

当然在这个例子中这不是问题,但如果数组非常大,我非常想避免创建中间数组(或者没有?).我认为应该可以将两个切片结合起来,但也许我正在监督某些事情.所以这个想法是这样的:

arange(1000)[ slice(None,None,2) + slice(10,20,None) ]
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,但我想做的.是否有任何组合切片对象?(尽管我的努力,我没有找到任何东西).

python numpy

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

从ndarray继承称为__getitem__

嗨,我正在尝试从ndarray派生一个类.我坚持在docs中找到的配方,但当我遇到一个getiem()函数时,我得到一个我不明白的错误.我确定这是应该如何工作但我不明白如何正确地做到这一点.基本上添加"dshape"属性的我的类看起来像:

class Darray(np.ndarray):
    def __new__(cls, input_array, dshape, *args, **kwargs):
        obj = np.asarray(input_array).view(cls)
        obj.SelObj = SelObj
        obj.dshape = dshape
        return obj

    def __array_finalize__(self, obj):
        if obj is None: return
        self.info = getattr(obj, 'dshape', 'N')  

    def __getitem__(self, index):        
        return self[index]
Run Code Online (Sandbox Code Playgroud)

当我现在尝试做的时候:

D = Darray( ones((10,10)), ("T","N"))
Run Code Online (Sandbox Code Playgroud)

解释器将以最大深度递归失败,因为他一遍又一遍地调用getitem.

有人可以向我解释为什么以及如何实现getitem功能?

欢呼,大卫

python numpy

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

使用FFT在周期性边界条件下找到质心

我想用傅立叶变换在周期边界条件下找到模拟实体的中心; 周期性边界条件意味着,只要有东西从盒子的一侧出来,就会像在经典游戏小行星中一样扭曲出现在对面.

所以我所拥有的是每个时间帧的矩阵(Nx3),其中N是xyz中的点数.我想要做的是确定云的中心,即使它们都在周期性边界上移动,也就是说卡在两者之间.

我对解决方案的想法现在是对这些点进行(质量权重)直方图,然后对其进行FFT并使用第一个傅里叶系数的相位来确定最大值在框中的位置.

作为我用过的测试用例

import numpy as np
Points_x  = np.random.randn(10000)
Box_min   = -10
Box_max   =  10
X         = np.linspace( Box_min, Box_max, 100 )

### make a Histogram of the points
Histogram_Points = np.bincount( np.digitize( Points_x, X ),  minlength=100 )

### make an artifical shift over the periodic boundary
Histogram_Points = np.r_[ Histogram_Points[45:], Histogram_Points[:45] ]
Run Code Online (Sandbox Code Playgroud)

在周期性边界上移动的点的直方图

所以现在我可以使用FFT,因为它总是需要一个周期函数.

## doing fft
F = np.fft.fft(Histogram_Points)

## getting rid of everything but first harmonic
F[2:] = 0.

## back transforming
Fist_harmonic = np.fft.ifft(F) …
Run Code Online (Sandbox Code Playgroud)

python numpy fft

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

嵌套任意深度的默认值

我想嵌套任意数量的默认值,如下所示:

from collections import defaultdict   
D = defaultdict( lambda:defaultdict(int) )
Run Code Online (Sandbox Code Playgroud)

这工作正常,如前所述.

现在我正在寻找以任意深度执行此操作的方式/函数:例如,我想要一个函数

def Gen_DDict( dim=3 ):
    "code I'm looking for"
Run Code Online (Sandbox Code Playgroud)

这将为dim = 3返回:

defaultdict( lambda : defaultdict( lambda : defaultdict(int) ) )
Run Code Online (Sandbox Code Playgroud)

python

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

Spark 数据框中的地图

使用 Spark 2.x,我正在使用数据帧。

val proposals = spark.read
  .option("header", true)
  .option("inferSchema", true)
  .option("delimiter", ";")
  .csv("/proposals.txt.gz")

proposals.printSchema()
Run Code Online (Sandbox Code Playgroud)

效果很好并给出:

root
 |-- MARKETCODE: string (nullable = true)
 |-- REFDATE: string (nullable = true)
 |-- UPDTIME: string (nullable = true)
 |-- UPDTIMEMSEC: integer (nullable = true)
 |-- ENDTIME: string (nullable = true)
 |-- ENDTIMEMSEC: integer (nullable = true)
 |-- BONDCODE: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

现在我想计算以毫秒为单位的时间,因此编写了一个函数:

def time2usecs( time:String, msec:Int )={
    val Array(hour,minute,seconds) = time.split(":").map( _.toInt )
    msec + seconds.toInt*1000 + minute.toInt*60*1000 + hour.toInt*60*60*1000
}
time2usecs( …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

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

标签 统计

python ×9

numpy ×7

csv ×2

dask ×2

pandas ×2

apache-spark ×1

apache-spark-sql ×1

c ×1

cython ×1

fft ×1

gaussian ×1

scala ×1

scipy ×1

smooth ×1