小编ely*_*ely的帖子

将单个维度添加到NumPy向量的有效方法,以便切片分配起作用

在NumPy中,如何有效地将1-D对象制作成2-D对象,其中单个维度是从当前对象推断出来的(即列表应该是1xlength还是lengthx1向量)?

 # This comes from some other, unchangeable code that reads data files.
 my_list = [1,2,3,4]

 # What I want to do:
 my_numpy_array[some_index,:] = numpy.asarray(my_list)

 # The above doesn't work because of a broadcast error, so:
 my_numpy_array[some_index,:] = numpy.reshape(numpy.asarray(my_list),(1,len(my_list)))

 # How to do the above without the call to reshape?
 # Is there a way to directly convert a list, or vector, that doesn't have a
 # second dimension, into a 1 by length "array" (but really it's still a …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

从大的元组/行列表中有效地构造Pandas DataFrame

我继承了以Stata .dta格式保存的数据文件.我可以用scikits.statsmodels genfromdta()函数加载它.这将我的数据放入一维NumPy数组中,其中每个条目都是一行数据,存储在24元组中.

In [2]: st_time = time.time(); initialload = sm.iolib.genfromdta("/home/myfile.dta"); ed_time = time.time(); print (ed_time - st_time)
666.523324013

In [3]: type(initialload)
Out[3]: numpy.ndarray

In [4]: initialload.shape
Out[4]: (4809584,)

In [5]: initialload[0]
Out[5]: (19901130.0, 289.0, 1990.0, 12.0, 19901231.0, 18.0, 40301000.0, 'GB', 18242.0, -2.368063, 1.0, 1.7783716290878204, 4379.355, 66.17669677734375, -999.0, -999.0, -0.60000002, -999.0, -999.0, -999.0, -999.0, -999.0, 0.2, 371.0)
Run Code Online (Sandbox Code Playgroud)

我很好奇是否有一种有效的方法将其安排到Pandas DataFrame中.根据我的阅读,逐行构建DataFrame看起来效率很低......但我的选择是什么?

我写了一个非常慢的第一遍,它只是将每个元组作为单行DataFrame读取并附加它.只是想知道是否还有其他更好的东西.

python tuples pandas dta

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

为什么具有相同`id`的两个函数具有不同的属性?

用相同的两个功能为什么id值有像不同的属性__doc____name__

这是一个玩具示例:

some_dict = {}
for i in range(2):
    def fun(self, *args):
        print i
    fun.__doc__ = "I am function {}".format(i)
    fun.__name__ = "function_{}".format(i)
    some_dict["function_{}".format(i)] = fun

my_type = type("my_type", (object,), some_dict)
m = my_type()

print id(m.function_0)
print id(m.function_1)
print m.function_0.__doc__
print m.function_1.__doc__
print m.function_0.__name__
print m.function_1.__name__
print m.function_0()
print m.function_1()
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

57386560
57386560
I am function 0
I am function 1
function_0
function_1
1 # <--- Why is it bound to the most recent …
Run Code Online (Sandbox Code Playgroud)

python methods types function dynamic

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

如何为matplotlib图的时间序列序列设置动画

我想在matplotlib中绘制一系列.png图像.目标是快速绘制它们以模拟电影的效果,但我有其他理由想要避免实际创建.avi文件或保存matplotlib图形,然后在Python之外按顺序查看它们.

我特意尝试在Python中的for循环中按顺序查看图像文件.假设我已正确导入matplotlib,并且我有自己的函数'new_image()'和'new_rect()',这里有一些示例代码无法工作,因为show()函数调用GUI mainloop的阻塞效果:

 for index in index_list:
     img = new_image(index)
     rect = new_rect(index)

     plt.imshow(img)
     plt.gca().add_patch(rect)
     plt.show()

     #I also tried pausing briefly and then closing, but this doesn't
     #get executed due to the GUI mainloop from show()
     time.sleep(0.25)
     plt.close()
Run Code Online (Sandbox Code Playgroud)

上面的代码只能显示第一个图像,但程序只是挂起并等待我手动关闭结果图窗口.一旦我关闭它,程序就会挂起并且不会重新绘制新的图像数据.我该怎么办?另请注意,我已尝试使用plt.draw()命令替换plt.show()命令,然后在for循环外添加plt.show().这不会显示任何内容而只是挂起.

python animation image image-processing matplotlib

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

将Python切片语法传递给函数

在Python中,是否可以完全封装常见的切片语法并传递它?我知道我可以使用slice__slice__模拟切片.但是我希望传递完全相同的语法,我将放在方括号中使用__getitem__.

例如,假设我编写了一个函数来返回列表的某些片段.

def get_important_values(some_list, some_condition, slice):
    elems = filter(some_condition, some_list)
    return elems[slice]
Run Code Online (Sandbox Code Playgroud)

如果我手动传入切片对象,这可以正常工作:

In [233]: get_important_values([1,2,3,4], lambda x: (x%2) == 0, slice(0, None))
Out[233]: [2, 4]
Run Code Online (Sandbox Code Playgroud)

但是我想让用户传递的内容与他们使用的切片完全相同__getitem__:

get_important_values([1,2,3,4], lambda x: (x%2) == 0, (0:-1) )

# or

get_important_values([1,2,3,4], lambda x: (x%2) == 0, (0:) )
Run Code Online (Sandbox Code Playgroud)

显然这会产生语法错误.但有没有办法让这项工作,而不是为x:y:t类型切片编写我自己的迷你解析器,并强制用户将它们作为字符串传递?

动机

我可以让这个示例函数返回一些可直接切片的东西,例如filter(some_condition, some_list),这将是作为列表的整个结果.然而,在我的实际例子中,内部函数要复杂得多,如果我知道用户想要的切片,我可以大大简化计算.但是我希望用户不必多做额外的事情就可以提前告诉我切片.

python syntax slice

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

Haskell*限定*导入一组函数

在Haskell中,我可以导入一个由其名称或快捷方式名称限定的模块,如下所示:

import qualified Data.List as List
import qualified Data.Map
Run Code Online (Sandbox Code Playgroud)

我还可以从模块中仅导入一组选定的函数,或者导入除选择集以外的所有函数,如下所示:

import Data.List (sort, intersperse)
import Data.Map hiding (findWithDefault)
Run Code Online (Sandbox Code Playgroud)

是否可以导入一组特定的函数,import Data.List (sort, intersperse)如上例所示,但是要确保仍然以合格的方式识别函数,例如List.sortList.intersperse

虽然这不起作用,但这是我所要求的精神:

import qualified Data.List (sort, intersperse) as List
Run Code Online (Sandbox Code Playgroud)

也许

import qualified Data.List as List (sort, intersperse)
Run Code Online (Sandbox Code Playgroud)

import haskell qualified-name

13
推荐指数
3
解决办法
1974
查看次数

functools.partial和类似lambda之间的区别?

在Python中,假设我有一个函数f,我想传递一些辅助参数(为简单起见,它只是第一个保持变量的参数).

这两种方式(如果有的话)之间有什么区别?

# Assume secondary_args and secondary_kwargs have been defined

import functools

g1 = functools.partial(f, *secondary_args, **secondary_kwargs)
g2 = lambda x: f(x, *secondary_args, **secondary_kwargs)
Run Code Online (Sandbox Code Playgroud)

例如,在doc页面中partial,有这样的引用:

partial 在类中定义的对象的行为类似于静态方法,并且在实例属性查找期间不会转换为绑定方法.

如果用于从提供给类的参数(在构造函数中或稍后通过函数)中创建类方法,lambda方法是否会受此影响?

python lambda partial functools

12
推荐指数
3
解决办法
5001
查看次数

参数解包是使用迭代还是项目获取?

我正在使用Python 2.7.3.

考虑一个带有自定义(虽然很糟糕)迭代和项目获取行为的虚拟类:

class FooList(list):
    def __iter__(self):
        return iter(self)
    def next(self):
        return 3
    def __getitem__(self, idx):
        return 3
Run Code Online (Sandbox Code Playgroud)

举个例子,看看奇怪的行为:

>>> zz = FooList([1,2,3])

>>> [x for x in zz]
# Hangs because of the self-reference in `__iter__`.

>>> zz[0]
3

>>> zz[1]
3
Run Code Online (Sandbox Code Playgroud)

但现在,让我们创建一个函数,然后执行参数解包zz:

def add3(a, b, c):
    return a + b + c

>>> add3(*zz)
6
# I expected either 9 or for the interpreter to hang like the comprehension!
Run Code Online (Sandbox Code Playgroud)

因此,参数解包以某种方式获取项数据,zz但不是通过使用其实现的迭代器迭代对象,也不是通过执行穷人的迭代器并调用__getitem__与对象一样多的项.

所以问题是:如果不通过这些方法,语法如何add3(*zz) …

python iterator arguments

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

值构造函数和元组之间有什么区别?

据说 Haskell元组只是代数数据类型的不同语法.类似地,有一些示例说明如何使用元组重新定义值构造函数.

例如,Haskell中的Tree数据类型可能被写为

data Tree a = EmptyTree | Node a (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)

可以像这样转换为"元组形式":

data Tree a = EmptyTree | Node (a, Tree a, Tree a)
Run Code Online (Sandbox Code Playgroud)

Node第一个示例中的值构造函数tuple与第二个示例中的值构造函数有什么区别?ie Node a (Tree a) (Tree a)vs. (a, Tree a, Tree a)(除了语法之外)?

在引擎盖下,Node a (Tree a) (Tree a)每个位置的3元组适当类型只是一种不同的语法?

我知道你可以部分应用一个值构造函数,例如Node 5它将具有类型:(Node 5) :: Num a => Tree a -> Tree a -> Tree a

您也可以使用(,,)函数来部分应用元组...但是这不知道未绑定条目的潜在类型,例如:

Prelude> :t (,,) 5
(,,) 5 …
Run Code Online (Sandbox Code Playgroud)

haskell tuples algebraic-data-types value-constructor

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

在Python中编写双重不等式时的运算符优先级是什么(显式在代码中,如何为数组重写?)

当我要求类似的东西时,按顺序执行的具体代码是什么

>>> 1 <= 3 >= 2
True
Run Code Online (Sandbox Code Playgroud)

如果两者具有相同的优先权并且只是它们的评估顺序,为什么第二个不等式起(3 >= 2)代替(True >= 2)

考虑一下这些之间的区别

>>> (1 < 3) < 2
True

>>> 1 < 3 < 2
False
Run Code Online (Sandbox Code Playgroud)

它只是一个纯粹的语法快捷方式硬编码到Python中,以扩展第二个作为and两个语句?

我可以改变一个类的这种行为,以便a <= b <= c扩展到不同的东西吗?它看起来像以下情况

a (logical operator) b (logical operator) c 
    --> (a logical operator b) and (b logical operator c)
Run Code Online (Sandbox Code Playgroud)

但真正的问题是如何在代码中实现它.

我很好奇,这样我可以复制这种__lt____gt__行为在一些我自己的类,但我感到困惑,这是如何实现的固定中部参数不变.

这是一个具体的例子:

>>> import numpy as np

>>> tst = np.asarray([1,2,3,4,5,6])

>>> 3 <= tst
array([False, False, …
Run Code Online (Sandbox Code Playgroud)

python operator-overloading inequalities

10
推荐指数
2
解决办法
8447
查看次数