小编rth*_*rth的帖子

如何检查该变量是一个lambda函数

我正在开发一个包含几个模块的项目.简化问题,有一些变量x.有时它可能是int或float或list.但它可能是一个lambda函数,应该以不同的方式处理.如何检查变量x是否为lambda?

例如

>>> x = 3
>>> type(x)
<type 'int'>
>>> type(x) is int
True
>>> x = 3.4
>>> type(x)
<type 'float'>
>>> type(x) is float
True
>>> x = lambda d:d*d
>>> type(x)
<type 'function'>
>>> type(x) is lambda
  File "<stdin>", line 1
    type(x) is lambda
                    ^
SyntaxError: invalid syntax
>>> type(x) is function
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined
>>> 
Run Code Online (Sandbox Code Playgroud)

python lambda types

9
推荐指数
1
解决办法
6307
查看次数

matplotlib中的热图与矢量格式

我正在尝试使用matplotlib绘制3D热图以及我的模拟结果.我已经阅读了这个主题并尝试使用imshow.不幸的是,当我以SVG或EPS格式保存图形时,它会将热像转换为图片(这对于期刊来说是不可接受的).所以,我也试过了hexbin - 但是图像太奇怪了.我不确定它会被期刊接受.我们还有其他东西,或者我必须用矩形填充热垫?

例如,如果运行此代码:

import numpy as np
import numpy.random
import matplotlib.pyplot as plt

# Generate some test data
x = np.random.randn(8873)
y = np.random.randn(8873)

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]

print extent
print heatmap
plt.clf()
surf = plt.imshow(heatmap, extent=extent)
plt.colorbar(surf, shrink=0.75, aspect=5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

并保存SVG文件,它将包含PNG图像:

   <g clip-path="url(#p6def4f5150)">
    <image height="347" width="315" x="115.127800906" xlink:href="data:image/png;base64,
Run Code Online (Sandbox Code Playgroud)

我在OpenSUSE和Ubuntu OS下使用matplotlib,版本1.1.1.

python svg matplotlib eps

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

将 numpy 数组转储为字符串的最快方法

我需要组织一个包含命名数据块的数据文件。数据是 NUMPY 个数组。但我不想使用 numpy.save 或 numpy.savez 函数,因为在某些情况下,数据必须通过管道或其他接口在服务器上发送。所以我想将 numpy 数组转储到内存中,压缩它,然后将它发送到服务器。

我试过简单的泡菜,像这样:

try:
    import cPickle as pkl
except:
    import pickle as pkl
import ziplib
import numpy as np

def send_to_db(data, compress=5):
     send( zlib.compress(pkl.dumps(data),compress) )
Run Code Online (Sandbox Code Playgroud)

.. 但这是一个极其缓慢的过程。

即使压缩级别为 0(未压缩),该过程也非常缓慢,并且只是因为酸洗。

有没有办法在没有pickle的情况下将numpy数组转储到字符串中?我知道 numpy 允许获取缓冲区numpy.getbuffer,但对我来说,如何使用这个转储的缓冲区来获取一个数组并不明显。

python arrays numpy pickle

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

从 C 代码调用 numpy 函数

我正在尝试将一些带有 Mex 扩展的 MatLab 代码移动到带有 numpy 和 scipy 库的 Python 中。使用这个精彩的教程http://www.scipy.org/Cookbook/C_Extensions/NumPy_arrays,我很快采用 C 函数从 Python 调用。但是一些 C 函数调用 MatLab 函数,所以我必须通过从 C 代码调用 numpy 和 scipy 函数来替换这段代码。

我试图做这样的事情Extending and Embedding the Python Interpreter。但是,我遇到了问题:如何将数组传递给函数参数。此外,在模块中查找函数然后为参数构建元组的这种漫长方式似乎并不优雅。

那么,例如,如何从 C 代码调用 numpy 模块中的 sum 函数?

我将不胜感激任何想法或链接。鲁本

PS这是一个例子:

    PyObject *feedback(PyObject *self, PyObject *args){
    PyArrayObject *Vecin;
    double mp=0,ret;
    if( !PyArg_ParseTuple(args,"O!d",&PyArray_Type,&Vecin,&mp)
      ||  Vecin == NULL ) return NULL;
    /* make python string with module name */
    PyObject *pName = PyString_FromString("numpy");
    if( pName == NULL){
        fprintf(stderr,"Couldn\'t setup …
Run Code Online (Sandbox Code Playgroud)

python numpy python-c-api python-c-extension

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

lambda函数内部的python迭代过程

我有一个简单的python 函数

def positiveGauss(mean,stdev):
        result = -1
        while result < 0:
                result = mean + np.random.randn()*stdev
        return result
Run Code Online (Sandbox Code Playgroud)

是否有可能使用lambda做同样的技巧?它需要在lambda中进行迭代,但我仍然相信它是可能的.

python lambda loops

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

是否有可能在类函数__add__中区分运算符+ =和+?

我有一个类,其中包含一些数据.对于此类的两个对象,Operator +应合并来自两个对象的数据并返回一个新对象.但是,如果在+ =运算符的情况下,添加对象的数据并返回self,则应该好得多.这里有一些伪代码来演示我想要实现的目标.

class BiGData:
  def __init__(self):
    self.data=[]
  def __add__(self,x):
    if (this is just a +):
      newData=BigData()
      newData.data += self.data
      newData.data += x.data
      return newData
    else: #(this is the += case)
      self.data += x.data
      return self
Run Code Online (Sandbox Code Playgroud)

如果__add__可以区分这两种使用函数,Python代码可以更好地阅读和理解!考虑一下:

x,y=BigData(),BigData()
z = x + y # z is a new object of the BigData class, 
          # which collects all data from both x and y
          # but data in x and y are intacked
x += y    # just append …
Run Code Online (Sandbox Code Playgroud)

python class addition

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