我有两个不同形状的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)
这工作...但它是一个有点吓人,因为我看不出有什么保证它会继续工作 - …
我正在使用相机预览帧,需要决定我将使用的最小预览尺寸.我需要相当高的分辨率,并试图找出我可以在更流行的Android手机和操作系统版本中获得的最高预览分辨率.(根据关于Nexus One/Froyo预览尺寸的这个问题,看起来它们有时会在同一设备的操作系统版本之间进行更改.)
在任何地方是否有资源基本上列出了android.hardware.Camera.Parameters.getSupportedPreviewSizes()许多不同设备(或设备/操作系统版本对)的输出?
或者,如果没有这样的列表,这个问题可能会变成这样的资源.我将非常高兴地推荐任何包含特定手机/操作系统版本的新个人数据点的答案.
并且预防明显的评论:是的,我知道无论如何我都需要在很多设备上测试我的代码.但理想情况下,我希望尽早做出一些合理明智的决策,而不必购买一大堆设备才能开始使用.
我的自定义UITableViewCells的正确高度取决于它们的宽度.不幸的是,很难知道单元格的实际内容区域宽度-tableView:heightForRowAtIndexPath:,因为我必须使用的唯一信息是tableview.有几个因素可以改变内容宽度,因此它不等于tableView.bounds.size.width; 我现在正在努力的是段指数.(另一种情况是如果将tableview分组.)
通常有一种很好的方法来从tableView获取单元格内容宽度吗?
如果失败了,有没有办法获得截面索引的宽度,以便我可以从边界宽度中减去它?(我不想硬编码,因为它不能跨设备移植.)
注意:这不是需要访问tableView中的单元格的重复:heightForRowAtIndexPath:因为解决方案只是使用边界.也不是一个get tableView:heightForRowAtIndexPath:在tableView之后发生:cellForRowAtIndexPath:?因为解决方案是硬编码一个常量(265.0),它不能跨设备移植.
在仔细阅读了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) 我正在解析 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结构体并重复嵌入它,但这在访问时增加了一层间接性。
还有其他方法可以解决这个问题吗?
我正在使用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) CGContextSetInterpolationQualityQuartz中的方法效果如何?
它会影响图像的质量吗?如果是这样,到什么程度?
我看不出插值和非插值图像之间的任何差异.
我在只读文件系统中使用git plumbing和镜像(因此是裸机)存储库。
我可以看到带有的子模块git ls-tree。我可以推断出它们的名称/路径和SHA1,但是找不到找到远程子模块的方法。
信息在某处。如果我克隆回购协议,那就git submodule init成功了。(进行克隆对于正常使用而言太昂贵了,特别是对于非常大的存储库而言。)如何直接从远程获得子模块?
它是类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) 我有一个充满NEON的注册表float32.我想将它们四舍五入到最接近的整数,而不必转回主CPU.转换float32为uint32简单截断的NEON指令,例如39.7变为39,而不是40.我不太关心如何0.5处理 - 从零或圆到圆,甚至两个都为我工作.
我能看到实现舍入的最佳途径是
int32(因此截断)float32int32,转换回float32,并留出以防万一我们正在四舍五入0.5(不需要abs值,因为我知道在我的情况下他们都是正面的)这似乎是丑陋,缓慢和复杂的.
有更清洁,更快,更简单,更健全的方式吗?