小编Jos*_*der的帖子

更好的方法是同时改变两个numpy阵列

我有两个不同形状的numpy数组,但长度相同(领先维度).我想改变它们中的每一个,使得相应的元素继续对应 - 即相对于它们的前导索引一致地混洗它们.

此代码有效,并说明了我的目标:

def shuffle_in_unison(a, b):
    assert len(a) == len(b)
    shuffled_a = numpy.empty(a.shape, dtype=a.dtype)
    shuffled_b = numpy.empty(b.shape, dtype=b.dtype)
    permutation = numpy.random.permutation(len(a))
    for old_index, new_index in enumerate(permutation):
        shuffled_a[new_index] = a[old_index]
        shuffled_b[new_index] = b[old_index]
    return shuffled_a, shuffled_b
Run Code Online (Sandbox Code Playgroud)

例如:

>>> a = numpy.asarray([[1, 1], [2, 2], [3, 3]])
>>> b = numpy.asarray([1, 2, 3])
>>> shuffle_in_unison(a, b)
(array([[2, 2],
       [1, 1],
       [3, 3]]), array([2, 1, 3]))
Run Code Online (Sandbox Code Playgroud)

然而,这种感觉笨重,效率低,而且速度慢,而且需要使阵列的复制 - 我宁愿他们洗牌在原地的,因为他们将是相当大的.

有没有更好的方法来解决这个问题?更快的执行速度和更低的内存使用率是我的主要目标,但优雅的代码也会很好.

我有另外一个想法是:

def shuffle_in_unison_scary(a, b):
    rng_state = numpy.random.get_state()
    numpy.random.shuffle(a)
    numpy.random.set_state(rng_state)
    numpy.random.shuffle(b)
Run Code Online (Sandbox Code Playgroud)

这工作...但它是一个有点吓人,因为我看不出有什么保证它会继续工作 - …

python random numpy shuffle numpy-ndarray

214
推荐指数
11
解决办法
10万
查看次数

支持流行Android手机的相机预览尺寸

我正在使用相机预览帧,需要决定我将使用的最小预览尺寸.我需要相当高的分辨率,并试图找出我可以在更流行的Android手机和操作系统版本中获得的最高预览分辨率.(根据关于Nexus One/Froyo预览尺寸这个问题,看起来它们有时会在同一设备的操作系统版本之间进行更改.)

在任何地方是否有资源基本上列出了android.hardware.Camera.Parameters.getSupportedPreviewSizes()许多不同设备(或设备/操作系统版本对)的输出?

或者,如果没有这样的列表,这个问题可能会变成这样的资源.我将非常高兴地推荐任何包含特定手机/操作系统版本的新个人数据点的答案.

并且预防明显的评论:是的,我知道无论如何我都需要在很多设备上测试我的代码.但理想情况下,我希望尽早做出一些合理明智的决策,而不必购买一大堆设备才能开始使用.

camera android

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

在-tableView期间获取tableview单元格的实际宽度:heightForRowAtIndexPath:当存在节索引时

我的自定义UITableViewCells的正确高度取决于它们的宽度.不幸的是,很难知道单元格的实际内容区域宽度-tableView:heightForRowAtIndexPath:,因为我必须使用的唯一信息是tableview.有几个因素可以改变内容宽度,因此它不等于tableView.bounds.size.width; 我现在正在努力的是段指数.(另一种情况是如果将tableview分组.)

通常有一种很好的方法来从tableView获取单元格内容宽度吗?

如果失败了,有没有办法获得截面索引的宽度,以便我可以从边界宽度中减去它?(我不想硬编码,因为它不能跨设备移植.)

注意:这不是需要访问tableView中的单元格的重复:heightForRowAtIndexPath:因为解决方案只是使用边界.也不是一个get tableView:heightForRowAtIndexPath:在tableView之后发生:cellForRowAtIndexPath:?因为解决方案是硬编码一个常量(265.0),它不能跨设备移植.

iphone uitableview

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

划分小数在Python 2.5到2.7中产生无效结果

在仔细阅读了Python的十进制模块文档之后,我仍然发现自己对分割小数时会发生什么感到困惑.

在Python 2.4.6中(有意义):

>>> import decimal
>>> decimal.Decimal(1000) / 10
Decimal("100")
Run Code Online (Sandbox Code Playgroud)

在Python 2.5.6,Python 2.6.7和Python 2.7.2(令人费解)中:

>>> import decimal
>>> decimal.Decimal(1000) / 10
Decimal('0.00000-6930898827444486144')
Run Code Online (Sandbox Code Playgroud)

更令人困惑的是,这个结果似乎没有效果:

>>> decimal.Decimal('0.00000-6930898827444486144')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.py", line 548, in __new__
    "Invalid literal for Decimal: %r" % value)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.py", line 3844, in _raise_error
    raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: '0.00000-6930898827444486144'
Run Code Online (Sandbox Code Playgroud)

结果是相同的使用decimal.Decimal(1000) / decimal.Decimal(10),因此使用int作为除数不是问题.

部分问题显然是精确度:

>>> decimal.Decimal("1000.000") / decimal.Decimal("10.000")
Decimal('0.00000-6930898827444486144')
>>> decimal.Decimal("1000.000") / …
Run Code Online (Sandbox Code Playgroud)

python numbers decimal

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

Go 中的 DRY 结构标签

我正在解析 XML,并且文档的几乎每个级别都有一个description.

这是一个玩具示例:

<obj>
    <description>outer object</description>
    <subobjA>
        <description>first kind of subobject</description>
        <foo>some goop</foo>
    </subobjA>
    <subobjB>
        <description>second kind of subobject</description>
        <bar>some other goop</bar>
    </subobjB>
</obj>
Run Code Online (Sandbox Code Playgroud)

这意味着涉及的每个结构体都有一个相同的Description成员,具有相同的标签`xml:"description,omitempty"`

这是功能代码:http://play.golang.org/p/1-co6Qcm8d

我希望描述标签是干的。显而易见要做的事情是:

type Description string `xml:"description,omitempty"`
Run Code Online (Sandbox Code Playgroud)

然后Description在整个过程中使用该类型。但是,只有结构成员可以有标签。请参阅http://play.golang.org/p/p83UrhrN4u了解我想写的内容;它不能编译。

人们可以创建一个Description结构体并重复嵌入它,但这在访问时增加了一层间接性。

还有其他方法可以解决这个问题吗?

dry go xml-parsing

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

当编译器没有提供uint8_t时,它有什么好的替代品?

我正在使用nvcc来编译CUDA内核.不幸的是,nvcc似乎不支持uint8_t,虽然它确实支持int8_t(!).unsigned char由于便携性,可读性和理智原因,我很快就不会使用它.还有另一个好的选择吗?


为了防止任何可能的误解,这里有一些细节.

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2010 NVIDIA Corporation
Built on Mon_Jun__7_18:56:31_PDT_2010
Cuda compilation tools, release 3.1, V0.2.1221
Run Code Online (Sandbox Code Playgroud)

代码包含

int8_t test = 0;
Run Code Online (Sandbox Code Playgroud)

很好,但代码包含

uint8_t test = 0;
Run Code Online (Sandbox Code Playgroud)

抛出一条错误信息

test.cu(8): error: identifier "uint8_t" is undefined
Run Code Online (Sandbox Code Playgroud)

compiler-construction types cuda

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

使用CGContextSetInterpolationQuality的ImageQuality

CGContextSetInterpolationQualityQuartz中的方法效果如何?

它会影响图像的质量吗?如果是这样,到什么程度?

我看不出插值和非插值图像之间的任何差异.

iphone quartz-graphics

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

git plumbing命令使子模块远程

我在只读文件系统中使用git plumbing和镜像(因此是裸机)存储库。

我可以看到带有的子模块git ls-tree。我可以推断出它们的名称/路径和SHA1,但是找不到找到远程子模块的方法。

信息在某处。如果我克隆回购协议,那就git submodule init成功了。(进行克隆对于正常使用而言太昂贵了,特别是对于非常大的存储库而言。)如何直接从远程获得子模块?

git git-submodules git-plumbing

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

不能通过__getattr __(__ getattribute__)调用__add__

它是类A的对象,在容器的类tmpA中.并非所有来自A的方法都在tmpA中.因此,例如:存在A + B,不存在tmpA + B. 我尝试从A调用tmpA的方法.我可以调用简单的方法,例如change(),但是__add__- 不起作用.如果要从对象中删除继承,代码可以正常工作.


#--------------------------------------
class A(object):
    def __init__( self, x, y ):
        self.x = x
        self.y = y
        pass
#-------    
    def __add__( self, arg ):
       tmp1 = self.x + arg.x
       tmp2 = self.y + arg.y
       return tmpA( A( tmp1, tmp2 ) )

    def change( self, x, y ):
        self.x = x
        self.y = y
        pass
    pass
#------------------------------------------
class tmpA( object ):
    def __init__( self, theA ):
        self.A = theA
        pass
#-------   
    def _print ( …
Run Code Online (Sandbox Code Playgroud)

python

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

使用NEON进行矢量化浮点舍入

我有一个充满NEON的注册表float32.我想将它们四舍五入到最接近的整数,而不必转回主CPU.转换float32uint32简单截断的NEON指令,例如39.7变为39,而不是40.我不太关心如何0.5处理 - 从零或圆到圆,甚至两个都为我工作.

我能看到实现舍入的最佳途径是

  • 转换为int32(因此截断)
  • 转换float32
  • 添加1 int32,转换回float32,并留出以防万一我们正在四舍五入
  • 减去
  • 比较0.5(不需要abs值,因为我知道在我的情况下他们都是正面的)
  • 根据比较结果选择截断或截断+ 1

这似乎是丑陋,缓慢和复杂的.

有更清洁,更快,更简单,更健全的方式吗?

floating-point arm rounding neon

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