我试图理解hdf5并发的限制.
有两个版本的hdf5:并行HDF5和默认值.并行版本目前在Ubuntu中提供,默认在Anaconda中(由"--enable-parallel"标志判断).
我知道并行写入同一个文件是不可能的.但是,我不完全理解默认情况下或使用并行构建可以扩展以下操作:
此外,有没有任何理由anaconda默认没有--enable-parallel标志?(https://github.com/conda/conda-recipes/blob/master/hdf5/build.sh)
我经常需要对大型numpy数组(几十亿个元素)进行排序,这成了我代码的瓶颈.我正在寻找一种并行化的方法.
该ndarray.sort()功能是否有任何并行实现?Numexpr模块为numpy数组上的大多数数学运算提供并行实现,但缺乏排序功能.
也许,有可能围绕C++并行排序实现一个简单的包装,并通过Cython使用它?
我正在尝试将用c ++编写的并行排序作为模板包装,以便将它与任何数字类型的numpy数组一起使用.我正在尝试使用Cython来做到这一点.
我的问题是我不知道如何将指向numpy数组(正确类型)的指针传递给c ++模板.我相信我应该使用融合dtypes,但我不太明白.
.pyx文件中的代码如下
# importing c++ template
cdef extern from "test.cpp":
void inPlaceParallelSort[T](T* arrayPointer,int arrayLength)
def sortNumpyArray(np.ndarray a):
# This obviously will not work, but I don't know how to make it work.
inPlaceParallelSort(a.data, len(a))
Run Code Online (Sandbox Code Playgroud)
在过去,我对所有可能的dtypes进行了类似的丑陋循环,但我相信应该有更好的方法来做到这一点.
在测试scipy的缩放功能时,我发现scailng-down数组的结果与最近邻算法类似,而不是平均.这极大地增加了噪声,并且对于许多应用而言通常是次优的.
是否存在不使用类似最近邻算法的替代方案,并在缩小尺寸时正确平均数组?虽然粗粒度适用于整数缩放因子,但我也需要非整数缩放因子.
测试用例:创建一个随机的100*M x 100*M阵列,对于M = 2..20将阵列缩小M系数的三种方式:
1)通过在MxM块中取平均值2)通过使用scipy的缩放比例因子1/M 3)获取a中的第一个点
得到的数组具有相同的平均值,相同的形状,但scipy的数组具有与最近邻居一样高的方差.为scipy.zoom采取不同的顺序并没有真正帮助.
import scipy.ndimage.interpolation
import numpy as np
import matplotlib.pyplot as plt
mean1, mean2, var1, var2, var3 = [],[],[],[],[]
values = range(1,20) # down-scaling factors
for M in values:
N = 100 # size of an array
a = np.random.random((N*M,N*M)) # large array
b = np.reshape(a, (N, M, N, M))
b = np.mean(np.mean(b, axis=3), axis=1)
assert b.shape == (N,N) #coarsegrained array
c = scipy.ndimage.interpolation.zoom(a, 1./M, order=3, prefilter = True)
assert c.shape == …Run Code Online (Sandbox Code Playgroud) PyDev具有终止所有正在运行的进程的功能.PyCharm有类似的东西吗?我只看到菜单中的"停止"按钮.
我需要通过非整数因子(例如100x100阵列到45x45阵列)对2D numpy数组进行下采样,执行局部平均,就像Photoshop/gimp会为图像做的那样.我需要双精度.目前的选择不能很好.
scipy.ndimage.zoom不执行平均,并且基本上使用最近邻居采样(参见上一个问题scipy.ndimage.interpolation.zoom使用最接近邻居的算法进行缩小)
scipy.misc.imresize将数组转换为int8; 我需要更高的精度和浮点数
skimage.transform.rescale也使用最近邻居并转发你skimage.transform.downscale_local_mean进行局部平均,
skimage.transform.downscale_local_mean只能执行整数比例因子(如果因子是非整数,则用零填充图像).整数缩放因子是一个微不足道的numpy excersice.
我错过了其他选择吗?