通常numpy强制分配的左侧和右侧匹配,因此,例如,如果我这样做a[:] = b,b必须是相同的形状或广播到相同的形状a.但该规则似乎有例外:
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a.copy()
>>> a[[0,1,2]] = b[::2]
>>> a
array([0, 2, 4, 3, 4, 5, 6, 7, 8, 9])
>>> a[np.arange(10)] = b[:2]
>>> a
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])
Run Code Online (Sandbox Code Playgroud)
它似乎只适用于1d数组,并且只有在赋值的左侧有花哨的索引,但我无法在任何地方找到此行为的文档.是否记录了这种行为,如果有的话,还有人可以举例说明它何时有用?
更新:
看起来numpy flatiter类型的行为也是这样,flatiter和fancy indexing之间是否存在一些我不知道的联系?
>>> a.flat = [10,11]
>>> a
array([10, 11, 10, 11, 10, 11, 10, 11, …Run Code Online (Sandbox Code Playgroud) 为什么python中的切片对象不可清除:
>>> s = slice(0, 10)
>>> hash(s)
TypeError Traceback (most recent call last)
<ipython-input-10-bdf9773a0874> in <module>()
----> 1 hash(s)
TypeError: unhashable type
Run Code Online (Sandbox Code Playgroud)
他们似乎是不可改变的:
>>> s.start = 5
TypeError Traceback (most recent call last)
<ipython-input-11-6710992d7b6d> in <module>()
----> 1 s.start = 5
TypeError: readonly attribute
Run Code Online (Sandbox Code Playgroud)
上下文,我想创建一个将python int或slice对象映射到某些值的字典,如下所示:
class Foo:
def __init__(self):
self.cache = {}
def __getitem__(self, idx):
if idx in self.cache:
return self.cache[idx]
else:
r = random.random()
self.cache[idx] = r
return r
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,我需要特殊的案例切片:
class Foo:
def __init__(self):
self.cache = {} …Run Code Online (Sandbox Code Playgroud) 我需要暂时创建一些文件的解压缩版本.我见过人们zcat somefile.gz > /tmp/somefile用bash 做的,所以我在python中创建了这个简单的函数:
from subprocess import check_call
def unzipto(zipfile, tmpfile):
with open(tmpfile, 'wb') as tf:
check_call(['zcat', zipfile], stdout=tf)
Run Code Online (Sandbox Code Playgroud)
但是使用zcat和check_call对我来说似乎很苛刻,我想知道是否有更多的"pythonic"方法来做到这一点.
谢谢你的帮助
我想在 Android VideoView 中播放 RTP 流。我在 Linux 机器上使用 gstreamer 创建流并将 rtp 流发送到 udp 接收器。
是否可以在没有 RTSP 服务器的情况下在 Android VideoView 中使用此流?
我尝试将视频 URI 设置为“rtp://:@”,但随后出现错误“无法播放视频”。我还考虑过创建一个 SDP 文件并在 Android 设备上使用它。但我不确定这是否有效以及如何创建这样的文件。
谢谢
类构造函数应该返回一个子类吗?
这主要是关于OOP风格和python风格的问题.我有问题需要实现一般案例解决方案,出于性能原因,我需要为特定输入类型实现优化解决方案.输入类型取决于用户.目前,我已经通过对一般案例解决方案进行子类化来实现这一目标,以制定优化的解决方案.我想出了以下示例来帮助描述我的意思.
from collections import Counter
class MyCounter(object):
"""General Case Counter"""
def __init__(self, seq):
self.seq = seq
def count(self, key):
return sum(key == item for item in self.seq)
class OptimizedCounter(MyCounter):
"""Counter optimized for hashable types"""
def __init__(self, seq):
self.counter = Counter(seq)
def count(self, key):
return self.counter.get(key, 0)
counter = MyCounter(['a', 'a', 'b', [], [0, 1]])
counter.count([0, 1])
# 1
counter = OptimizedCounter(['a', 'a', 'b'])
counter.count('a')
# 2
Run Code Online (Sandbox Code Playgroud)
我的问题是如何设计一个流畅的界面,以便用户获得一个合适的实例,而不必担心它是如何实现的.我考虑过做类似下面的事情,但这对我来说很难看.是否有更规范或OOP的方式来做这样的事情?
class MyCounter(object):
"""General Case Counter"""
def __new__(cls, seq):
if hasOnlyHashables(seq):
return object.__new__(OptimizedCounter) …Run Code Online (Sandbox Code Playgroud) 我有一个(3,3)numpy数组,想要找出绝对值最大的元素的符号:
X = [[-2.1, 2, 3],
[ 1, -6.1, 5],
[ 0, 1, 1]]
s = numpy.argmax(numpy.abs(X),axis=0)
Run Code Online (Sandbox Code Playgroud)
给了我需要的元素的索引s = [ 0,1,1].
如何使用此数组提取元素[ -2.1, -6.1, 5]以找出其符号?