我正在将大文本文件转换为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) 如果它应该能够同时处理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 …
我有一组点(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.
通常这种平滑是通过毛皮空间并与内核相乘来完成的,但我真的不知道这是否可以使用不规则间隔的数据.
谢谢你的任何想法
有没有办法读取通过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) 谁能告诉我如何检查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中,但我不明白如何使用它们.我已经试图找到一个有启发性的例子,但没有找到.
我有一个形状(M,N)的数组A现在我想做手术
R = (A[:,newaxis,:] * A[newaxis,:,:]).sum(2)
它应该产生一个(MxM)数组.现在的问题是数组非常大,我得到一个内存错误,因为MxMxN数组不适合内存.
完成这项工作的最佳策略是什么?C?地图()?还是有特殊功能吗?
谢谢你,大卫
是否有一种智能且简单的方法将两个切片操作合二为一?
说我有类似的东西
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)
这当然不起作用,但我想做的.是否有任何组合切片对象?(尽管我的努力,我没有找到任何东西).
嗨,我正在尝试从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功能?
欢呼,大卫
我想用傅立叶变换在周期边界条件下找到模拟实体的中心; 周期性边界条件意味着,只要有东西从盒子的一侧出来,就会像在经典游戏小行星中一样扭曲出现在对面.
所以我所拥有的是每个时间帧的矩阵(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) 我想嵌套任意数量的默认值,如下所示:
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) 使用 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)