小编ali*_*i_m的帖子

在python中加速逐元素的数组乘法

我一直在玩numba和numexpr试图加速一个简单的元素矩阵乘法.我无法获得更好的结果,它们基本上(速度方向)等同于numpys乘法函数.这个地区有人有运气吗?我使用numba和numexpr是错误的(我对此很新)或者这是一个不好的方法来尝试加快速度.这是一个可重现的代码,谢谢你的高级:

import numpy as np
from numba import autojit
import numexpr as ne

a=np.random.rand(10,5000000)

# numpy
multiplication1 = np.multiply(a,a)

# numba
def multiplix(X,Y):
    M = X.shape[0]
    N = X.shape[1]
    D = np.empty((M, N), dtype=np.float)
    for i in range(M):
        for j in range(N):
            D[i,j] = X[i, j] * Y[i, j]
    return D

mul = autojit(multiplix)
multiplication2 = mul(a,a)

# numexpr
def numexprmult(X,Y):
    M = X.shape[0]
    N = X.shape[1]
    return ne.evaluate("X * Y")

multiplication3 = numexprmult(a,a) 
Run Code Online (Sandbox Code Playgroud)

performance numpy matrix-multiplication python-2.7 numba

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

使用h5py编写大型hdf5数据集

目前,我正在使用h5py生成hdf5数据集.我有类似的东西

import h5py
import numpy as np
my_data=np.genfromtxt("/tmp/data.csv",delimiter=",",dtype=None,names=True)

myFile="/tmp/f.hdf"    
with h5py.File(myFile,"a") as f:
  dset = f.create_dataset('%s/%s'%(vendor,dataSet),data=my_data,compression="gzip",compression_opts=9)
Run Code Online (Sandbox Code Playgroud)

这适用于相对较大的ASCII文件(400MB).我想对更大的数据集(40GB)做同样的事情.使用h5py有更好或更有效的方法吗?我想避免将整个数据集加载到内存中.

有关数据的一些信息:

  1. 我不知道数据的类型.理想情况下,我想用dtype=Nonenp.loadtxt()
  2. 我不知道文件的大小(尺寸).他们各不相同

python numpy hdf5 h5py

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

诊断python中的内存泄漏

我一直在尝试使用objgraph调试Coopr包中的内存泄漏:https://gist.github.com/3855150

我把它固定到一个_SetContainer对象,但似乎无法弄清楚为什么该对象持久存在于内存中.这是结果objgraph.show_refs:

show_refs

如何查找循环引用以及如何让垃圾收集器收集_SetContainer实例?

我以前认为类本身可能有一个自引用(上图中右边的类下方的元组).但是objgraph总是将继承的类总是显示为具有自引用元组.你可以在这里看到一个非常简单的测试用例.

python memory-leaks objgraph

12
推荐指数
1
解决办法
885
查看次数

是否可以直接将仿射变换矩阵应用于Mayavi ImageActor对象?

我正在使用Mayavi渲染一些由3D体积内的多个2D平面组成的成像数据,其位置,方向和比例由4x4刚体仿射变换矩阵定义.每架飞机包括:

  • 我使用的2D图像数据阵列 mayavi.mlab.imshow
  • 一组ROI的由线和点,我抽签使用的mayavi.mlab.points3dmayavi.mlab.plot3d分别.

我通过用我的仿射矩阵点击它们的坐标,将我的点和线顶点从2D参考平面转换为3D空间.基于我刚才的问题/答案在这里,我想通了,我可以设置的位置和方向ImageActor个别对象,使用:

obj = mlab.imshow(img)
obj.actor.orientation = [pitch, roll, yaw] # the required orientation (deg)
obj.actor.position = [dx, dy, dz] # the required position 
obj.actor.scale = [sx, sy, sz] # the required scale
Run Code Online (Sandbox Code Playgroud)

现在情节看起来像这样:

在此输入图像描述

所有东西都很好地排列,但是很难解释,因为这些平面的间距非常密集.我现在希望能够做的是通过一些比例因子"拉伸"z轴.在点和线的情况下,这很容易做到 - 我所做的就是将所有变换后的z坐标乘以比例因子.

但是,我无法弄清楚如何将相同的变换应用于图像.如果我只是缩放z位置,那么图像的旋转和缩放当然是错误的,并且我绘制的点/线将不再与图像位于同一平面上:

在此输入图像描述

我需要做的是应用一个非刚性仿射变换,它包含剪切以及旋转,平移和缩放到我的图像.

有没有什么方法可以手动应用剪切ImageActor,甚至更好的只是直接应用我预先计算的任意4x4仿射矩阵?

python transformation mayavi

12
推荐指数
1
解决办法
1757
查看次数

Python中的机器Epsilon

我正在学习的手册(我是新手)说:

"差异小于机器epsilon的数字在数值上是相同的"

使用Python,可以通过键入获得浮动值的机器epsilon

eps = numpy.finfo(float).eps
Run Code Online (Sandbox Code Playgroud)

现在,如果我检查

1 + eps/10 != 1
Run Code Online (Sandbox Code Playgroud)

我获得了假.

但是,如果我检查

0.1 + eps/10 != 0.1
Run Code Online (Sandbox Code Playgroud)

我获得了真实.

如果我将eps除以100,我后面的逻辑表达式将变为False.那么,机器epsilon如何工作?Python文档只是说

"最小的可表示正数,使得1.0 + eps!= 1.0.eps类型是一种合适的浮点类型."

先感谢您.

python floating-point precision numpy

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

在numpy数组中屏蔽圆形扇区

我有一个代码将一个numpy数组切成一个圆圈.我希望仅从圆圈中恢复包含在特定角度范围内的值并掩盖数组.例如:屏蔽原始数组,其中(x,y)位置包含在圆圈的0到45度之间.

有这样做的pythonic方式吗?

这是我的(简化)原始代码:

import numpy as np
matrix = np.zeros((500,500))
x = 240
y = 280
radius = 10
mask=np.ogrid[x-radius:x+radius+1,y-radius:y+radius+1]
matrix[mask]
Run Code Online (Sandbox Code Playgroud)

提前致谢

编辑:我省略了半径可以变化.

python numpy angle matrix

11
推荐指数
1
解决办法
6821
查看次数

python中稀疏矩阵的相关系数?

有谁知道如何从python中的一个非常大的稀疏矩阵计算相关矩阵?基本上,我正在寻找类似于numpy.corrcoefscipy稀疏矩阵的东西.

python numpy scipy sparse-matrix correlation

11
推荐指数
2
解决办法
5966
查看次数

python中的对数插值

使用numpy.interp我能够计算一维分段线性插值到具有离散数据点的给定值的函数.

这是一个类似的函数来返回对数插值吗?

python interpolation numpy

11
推荐指数
1
解决办法
7499
查看次数

从给定的numpy数组创建块对角numpy数组

我有一个二维numpy数组,列数和行数相同.我想把它们安排成一个更大的阵列,在对角线上有较小的阵列.应该可以指定起始矩阵在对角线上的频率.例如:

a = numpy.array([[5, 7], 
                 [6, 3]])
Run Code Online (Sandbox Code Playgroud)

所以,如果我想在对角线上对这个数组进行2次,那么所需的输出将是:

array([[5, 7, 0, 0], 
       [6, 3, 0, 0], 
       [0, 0, 5, 7], 
       [0, 0, 6, 3]])
Run Code Online (Sandbox Code Playgroud)

三次:

array([[5, 7, 0, 0, 0, 0], 
       [6, 3, 0, 0, 0, 0], 
       [0, 0, 5, 7, 0, 0], 
       [0, 0, 6, 3, 0, 0],
       [0, 0, 0, 0, 5, 7],
       [0, 0, 0, 0, 6, 3]])
Run Code Online (Sandbox Code Playgroud)

有没有一种快速的方法来实现这个与numpy方法和任意大小的起始数组(仍然考虑起始数组具有相同数量的行和列)?

python arrays numpy

11
推荐指数
3
解决办法
4680
查看次数

在Python中协调np.fromiter和多维数组

我喜欢使用np.fromiter,numpy因为它是一种构建np.array对象的资源惰性方式.但是,它似乎不支持多维数组,这些数组也非常有用.

import numpy as np

def fun(i):
    """ A function returning 4 values of the same type.
    """
    return tuple(4*i + j for j in range(4))

# Trying to create a 2-dimensional array from it:
a = np.fromiter((fun(i) for i in range(5)), '4i', 5) # fails

# This function only seems to work for 1D array, trying then:
a = np.fromiter((fun(i) for i in range(5)),
        [('', 'i'), ('', 'i'), ('', 'i'), ('', 'i')], 5) …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy lazy-evaluation multidimensional-array

11
推荐指数
2
解决办法
2925
查看次数