给定三个numpy数组:一个多维数组x,一个y具有尾随单一维度的向量,以及一个z不带尾随单一维度的向量,
x = np.zeros((M,N))
y = np.zeros((M,1))
z = np.zeros((M,))
Run Code Online (Sandbox Code Playgroud)
广播操作的行为根据矢量表示和上下文而变化:
x[:,0] = y # error cannot broadcast from shape (M,1) into shape (M)
x[:,0] = z # OK
x[:,0] += y # error non-broadcastable output with shape (M) doesn't match
# broadcast shape(M,M)
x[:,0] += z # OK
x - y # OK
x - z # error cannot broadcast from shape (M,N) into shape (M)
Run Code Online (Sandbox Code Playgroud)
我意识到我可以做到以下几点:
x - z[:,None] # OK
Run Code Online (Sandbox Code Playgroud)
但我不明白这个明确的符号是什么给我买的.它当然不会购买可读性.我不明白为什么表达式没问题 …
在Python中对iterable执行简单转换是通过列表解析来实现的:
y = [f(arg) for arg in args]
Run Code Online (Sandbox Code Playgroud)
where f是一个简单的语句,或者一个函数mapif f是一个命名函数:
y = map(f, args)
Run Code Online (Sandbox Code Playgroud)
圭多有利于列表解析过map(lambda x:..., args),确实列表内涵上的使用map或filter 在所有.
但是,我不清楚我应该如何解决以下问题:
解决此类问题最常用的方法是什么?我见过并尝试过的一些我已经参与过的Python项目:
显而易见的方法是预先声明输出和循环:
def transform(...):
...
y = []
for arg in args:
first_statement
second_statement
...
y.append(statement)
Run Code Online (Sandbox Code Playgroud)
评论:
y必须与长度相同args)另一种选择是将逻辑封装在嵌套函数中,然后使用map或list comprehension调用它:
def transform(...):
...
def anonymous(arg):
first_statement
second_statement
...
return statement
y = map(anonymous, …Run Code Online (Sandbox Code Playgroud)