小编Bor*_*lik的帖子

"克隆"行或列向量

有时将行或列向量"克隆"到矩阵是有用的.通过克隆我的意思是转换行向量,如

[1,2,3]
Run Code Online (Sandbox Code Playgroud)

进入矩阵

[[1,2,3]
 [1,2,3]
 [1,2,3]
]
Run Code Online (Sandbox Code Playgroud)

或列向量,如

[1
 2
 3
]
Run Code Online (Sandbox Code Playgroud)

[[1,1,1]
 [2,2,2]
 [3,3,3]
]
Run Code Online (Sandbox Code Playgroud)

在matlab或octave中,这很容易完成:

 x = [1,2,3]
 a = ones(3,1) * x
 a =

    1   2   3
    1   2   3
    1   2   3

 b = (x') * ones(1,3)
 b =

    1   1   1
    2   2   2
    3   3   3
Run Code Online (Sandbox Code Playgroud)

我想在numpy中重复这个,但没有成功

In [14]: x = array([1,2,3])
In [14]: ones((3,1)) * x
Out[14]:
array([[ 1.,  2.,  3.],
       [ 1.,  2.,  3.],
       [ 1.,  2.,  3.]])
# so far …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra

136
推荐指数
8
解决办法
10万
查看次数

在Python中,如何捕获警告,就好像它们是例外?

我在我的python代码中使用的第三方库(用C编写)发出警告.我希望能够使用try except语法来正确处理这些警告.有没有办法做到这一点?

python warnings exception-handling exception

87
推荐指数
7
解决办法
5万
查看次数

如何在python抽象类中创建抽象属性

在下面的代码中,我创建了一个基本抽象类Base.我希望所有继承的类都Base提供name属性,所以我创建了这个属性@abstractmethod.

然后我创建了一个Base名为的子类Base_1,它旨在提供一些功能,但仍然是抽象的.没有name属性Base_1,但是python会在没有错误的情况下实现该类的对象.如何创建抽象属性?

from abc import ABCMeta, abstractmethod
class Base(object):
    __metaclass__ = ABCMeta
    def __init__(self, strDirConfig):
        self.strDirConfig = strDirConfig

    @abstractmethod
    def _doStuff(self, signals):
        pass

    @property    
    @abstractmethod
    def name(self):
        #this property will be supplied by the inheriting classes
        #individually
        pass


class Base_1(Base):
    __metaclass__ = ABCMeta
    # this class does not provide the name property, should raise an error
    def __init__(self, strDirConfig):
        super(Base_1, self).__init__(strDirConfig)

    def _doStuff(self, signals): …
Run Code Online (Sandbox Code Playgroud)

python abstract-class properties decorator

81
推荐指数
6
解决办法
5万
查看次数

如何在非唯一列中按日期将pandas DataFrame条目分组

Pandas DataFrame包含名为"date"包含非唯一datetime值的列.我可以使用以下方法对此帧中的行进行分组:

data.groupby(data['date'])
Run Code Online (Sandbox Code Playgroud)

但是,这会按datetime值拆分数据.我想按照"日期"列中存储的年份对这些数据进行分组.此页面显示如何在时间戳用作索引的情况下按年分组,在我的情况下不是这样.

我如何实现这种分组?

python pandas

68
推荐指数
4
解决办法
7万
查看次数

如何删除numpy.array中的列

我想删除numpy.array中的选定列.这就是我做的:

n [397]: a = array([[ NaN,   2.,   3., NaN],
   .....:        [  1.,   2.,   3., 9]])

In [398]: print a
[[ NaN   2.   3.  NaN]
 [  1.   2.   3.   9.]]

In [399]: z = any(isnan(a), axis=0)

In [400]: print z
[ True False False  True]

In [401]: delete(a, z, axis = 1)
Out[401]:
 array([[  3.,  NaN],
       [  3.,   9.]])
Run Code Online (Sandbox Code Playgroud)

在此示例中,我的目标是删除包含NaN的所有列.我希望最后一个命令导致:

array([[2., 3.],
       [2., 3.]])
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

python numpy scipy

62
推荐指数
6
解决办法
15万
查看次数

在python中模拟按值传递行为

我想模仿python中的pass-by-value行为.换句话说,我想确保我写的函数不会修改用户提供的数据.

一种可能的方法是使用深层复制:

from copy import deepcopy
def f(data):
    data = deepcopy(data)
    #do stuff
Run Code Online (Sandbox Code Playgroud)

是否有更高效或更pythonic的方式来实现这一目标,尽可能少地假设传递的对象(如.clone()方法)

编辑

我知道技术上python中的所有内容都是按值传递的.我有兴趣模仿行为,即确保我不会混淆传递给函数的数据.我想最常用的方法是使用自己的克隆机制或深度复制来克隆有问题的对象.

python pass-by-value

58
推荐指数
3
解决办法
5万
查看次数

从python的日志记录器中删除处理程序

我正在玩Python的日志记录系统.我在循环中从Logger对象中删除处理程序时发现了一个奇怪的行为.也就是说,我的for循环删除了除一个处理程序以外 额外调用以.removeHandler顺利删除最后一个处理程序.呼叫期间不会发出任何错误消息.

这是测试代码:

import logging
import sys
logging.basicConfig()
dbg = logging.getLogger('dbg')
dbg.setLevel(logging.DEBUG)

testLogger = logging.getLogger('mylogger')
sh = logging.StreamHandler(sys.stdout)
fh = logging.FileHandler('mylogfile.log')
dbg.debug('before adding handlers: %d handlers'%len(testLogger.handlers))
testLogger.addHandler(fh)
testLogger.addHandler(sh)

dbg.debug('before removing. %d handlers: %s'%(len(testLogger.handlers), 
                                              str(testLogger.handlers)))
for h in testLogger.handlers:
    dbg.debug('removing handler %s'%str(h))
    testLogger.removeHandler(h)
    dbg.debug('%d more to go'%len(testLogger.handlers))

#HERE I EXPECT THAT NO HANDLER WILL REMAIN    
dbg.debug('after removing: %d handlers: %s'%(len(testLogger.handlers), 
                                              str(testLogger.handlers)))
if len(testLogger.handlers) > 0:
    #Why is this happening?
    testLogger.removeHandler(testLogger.handlers[0])
dbg.debug('after manually removing the last handler: %d handlers'%len(testLogger.handlers))    
Run Code Online (Sandbox Code Playgroud)

我希望在循环结束时没有处理程序将保留在 …

python logging

47
推荐指数
4
解决办法
5万
查看次数

与蟒蛇大熊猫融化相反

我无法弄清楚如何在python中使用Pandas进行"反向融化".这是我的起始数据

import pandas as pd

from StringIO import StringIO

origin = pd.read_table(StringIO('''label    type    value
x   a   1
x   b   2
x   c   3
y   a   4
y   b   5
y   c   6
z   a   7
z   b   8
z   c   9'''))

origin
Out[5]: 
  label type  value
0     x    a      1
1     x    b      2
2     x    c      3
3     y    a      4
4     y    b      5
5     y    c      6
6     z    a      7
7     z    b      8
8     z …
Run Code Online (Sandbox Code Playgroud)

python pivot reshape melt pandas

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

如何在Python中创建空列表的列表或元组?

我需要逐步填充列表或列表元组.看起来像这样的东西:

result = []
firstTime = True
for i in range(x):
    for j in someListOfElements:
        if firstTime:
            result.append([f(j)])
        else:
            result[i].append(j)
Run Code Online (Sandbox Code Playgroud)

为了使它更简洁更优雅,我想我会预先分配一个空列表列表

result = createListOfEmptyLists(x)
for i in range(x):
    for j in someListOfElements:
        result[i].append(j)
Run Code Online (Sandbox Code Playgroud)

预分配部分对我来说并不明显.当我这样做时result = [[]] * x,我收到一个x对同一列表的引用列表,以便输出如下

result[0].append(10)
print result
Run Code Online (Sandbox Code Playgroud)

是:

[[10], [10], [10], [10], [10], [10], [10], [10], [10], [10]]
Run Code Online (Sandbox Code Playgroud)

我可以使用loop(result = [[] for i in range(x)]),但我想知道是否存在"无循环"解决方案.

是获得我正在寻找的唯一方法

python memory-management

40
推荐指数
3
解决办法
4万
查看次数

在matplotlib中添加colorbar时的AttributeError

以下代码无法在Python 2.5.4上运行:

from matplotlib import pylab as pl
import numpy as np

data = np.random.rand(6,6)
fig = pl.figure(1)
fig.clf()
ax = fig.add_subplot(1,1,1)
ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
pl.colorbar()

pl.show()
Run Code Online (Sandbox Code Playgroud)

错误消息是

C:\temp>python z.py
Traceback (most recent call last):
  File "z.py", line 10, in <module>
    pl.colorbar()
  File "C:\Python25\lib\site-packages\matplotlib\pyplot.py", line 1369, in colorbar
    ret = gcf().colorbar(mappable, cax = cax, ax=ax, **kw)
  File "C:\Python25\lib\site-packages\matplotlib\figure.py", line 1046, in colorbar
    cb = cbar.Colorbar(cax, mappable, **kw)
  File "C:\Python25\lib\site-packages\matplotlib\colorbar.py", line 622, in __init__
    mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax
AttributeError: …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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