小编kiy*_*iyo的帖子

如何动态设置类名?

我有一个函数创建从它的参数派生的类:

def factory(BaseClass) :
    class NewClass(BaseClass) : pass
    return NewClass
Run Code Online (Sandbox Code Playgroud)

现在,当我使用它来创建新类时,这些类的名称都相同,并且实例看起来像它们具有相同的类型:

NewA = factory(ClassA)
NewB = factory(ClassB)
print type(NewA()) # <class __main__.NewClass>
print type(NewB()) # <class __main__.NewClass>
Run Code Online (Sandbox Code Playgroud)

是否正确修复了手动设置__name__属性?

NewA.__name__ = 'NewA'
print type(NewA()) # <class __main__.NewA>
Run Code Online (Sandbox Code Playgroud)

我在做什么时还应该设置其他东西吗?

python

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

如何使用git子树包含另一个git存储库的一部分并在两个方向上合并更新

我有两个git存储库显示如下.第一个结构就像一个典型的python项目.

foo_repo/
    .git/
    setup.py
    foo/
         __init__.py
         some_code.py
    tests/

bar/
    .git/
Run Code Online (Sandbox Code Playgroud)

我想将foo_repo/foo/目录bar/作为子树包含在内,我希望能够将更新foo_repo/foo/some_code.py从foo_repo存储库合并到bar,反之亦然.

初始设置不是太糟糕.从foo/我使用的目录:

git subtree --prefix=foo/ split -b export
Run Code Online (Sandbox Code Playgroud)

然后我在foo_repo中有一个新的分支,只有foo_repo/foo/目录的内容.为了把它带到酒吧,我只是去bar/目录和:

git subtree --prefix=foo/ add ../foo_repo/.git export
Run Code Online (Sandbox Code Playgroud)

既然我已经完成了设置,我想做一些代码开发并foo/在两个repos中保持最新.从酒吧推出我想我已经想通了.来自bar/目录:

touch foo/more_code.py
git add foo/more_code.py
git commit -m "more code"
git subtree --prefix=foo/ push ../foo_repo/.git export
Run Code Online (Sandbox Code Playgroud)

然后从foo_repo/目录:

git checkout master
git subtree --prefix=foo/ merge export
Run Code Online (Sandbox Code Playgroud)

合并另一种方式是我被困住的地方.来自foo_repo/:

git checkout master
touch foo/yet_more_code.py
git add foo/yet_more_code.py …
Run Code Online (Sandbox Code Playgroud)

git github git-merge git-subtree

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

创建一个numpy数组子类,其中所有形状更改操作都返回一个普通数组

我有一个数组子类,其中一些额外的属性仅对对象的原始形状有效.有没有办法确保所有数组形状更改操作返回一个普通的numpy数组而不是我的类的实例?

我已经写array_wrap,但是这似乎并不具有像操作的任何影响np.mean,np.sumnp.rollaxis.这些只是返回我班级的一个实例.

import numpy as np    

class NewArrayClass(np.ndarray):
    __array_priority__ = 3.0
    def __array_wrap__(self, out_arr, context=None):
        if out_arr.shape == self.shape:
            out = out_arr.view(new_array)
            # Do a bunch of class dependant initialization and attribute copying.
            # ...
            return out
        else:
            return np.asarray(out_arr)

A = np.arange(10)
A.shape = (5, 2)
A = arr.view(NewArrayClass)
# Would like this to be np.ndarray, but get new_array_class.
print type(np.sum(A, 0))
Run Code Online (Sandbox Code Playgroud)

我想我必须做的东西__new__还是__array_finalize__,但我还没有什么线索.

更新: 仔细阅读子类化的numpy文档(http://docs.scipy.org/doc/numpy/user/basics.subclassing.html)后,所有数组形状更改操作都在执行"从模板新建"操作.所以问题就变成了,如何使'new from template'操作返回ndarray实例而不是我的类的实例.据我所知, …

python numpy scipy

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

在numpy中获取结果数组的dtype

我想为数组操作的输出预分配内存,我需要知道是什么dtype来实现它.下面我有一个功能,可以做我想做的事,但非常难看.

import numpy as np

def array_operation(arr1, arr2):
    out_shape = arr1.shape
    # Get the dtype of the output, these lines are the ones I want to replace.
    index1 = ([0],) * arr1.ndim
    index2 = ([0],) * arr2.ndim
    tmp_arr = arr1[index1] * arr2[index2]
    out_dtype = tmp_arr.dtype
    # All so I can do the following.
    out_arr = np.empty(out_shape, out_dtype)
Run Code Online (Sandbox Code Playgroud)

以上是非常难看的.numpy有没有这样做的功能?

python numpy scipy

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

endianness如何与SIMD寄存器一起使用?

我正在使用整数和SSE,并且对于字节序如何影响数据进出寄存器变得非常困惑.

我的初步,错误,理解

最初我的理解如下.如果我有一个4字节整数的数组,那么内存将按如下方式布局,因为x86架构是小端的:

0D 0C 0B 0A 1D 1C 1B 1A 2D 2C 2B 2A .... nD nC nB nA
Run Code Online (Sandbox Code Playgroud)

其中字母A,B,CD索引的整数元素内的字节数,和数字索引的元素.

在XMM寄存器中,我的理解是四个整数将按如下方式排列:

0A 0B 0C 0D 1A 1B 1C 1D 2A 2B 2C 2D 3A 3B 3C 3D
Run Code Online (Sandbox Code Playgroud)

但是,由于几个原因,我很确定这张照片是错误的.第一个是mm_load_si128内在的文档,它应该适用于任何整数数据,但在上面的图片应该只适用于一个字大小.同样有这个帖子:https://software.intel.com/en-us/forums/topic/286624.最后,我看到人们编写如下代码:

__declspec(align(16)) int32_t A[N];
__m128i* As = (__m128i*)A;
Run Code Online (Sandbox Code Playgroud)

一张可能正确的图片

关于字节序的维基百科文章说我应该想到内存地址从右到左增加.那么内存如下图呢?

nA nB nC nD ... 2A 2B 2C 2D 1A 1B 1C 1D 0A 0B 0C 0D
Run Code Online (Sandbox Code Playgroud)

然后在寄存器中: …

x86 sse simd endianness

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

标签 统计

python ×3

numpy ×2

scipy ×2

endianness ×1

git ×1

git-merge ×1

git-subtree ×1

github ×1

simd ×1

sse ×1

x86 ×1