假设我们有输入2D numpy数组,矩阵和对角元素的返回乘积的函数。 我想将这样的函数应用于矩阵数组并获得结果数组。当然,有天真的方法。例如:
def our_func():
...
array_of_matrixes = [...]
results = []
for curr_matrix in array_of_matrixes:
results.append(out_func(curr_matrix))
NumPy有更好的解决方法吗?我尝试使用.apply_over_axes
和.apply_along_axis
,但这些不合适。
答案 0 :(得分:1)
np.apply_along_axis
或np.vectorize
无法正常工作的原因是,如果您的矩阵具有相同的形状,numpy会压平矩阵数组并尝试将our_func
应用于每个矩阵每个矩阵中的单个单元格,未定义。
你可以替换
results = []
for curr_matrix in array_of_matrixes:
results.append(out_func(curr_matrix))
使用:
map(our_func, array_of_matrixes)
它不会更有效率,但它更简洁,也可能更清晰。
这是一个完整的例子:
import numpy as np
a = np.matrix('1 2;3 4')
b = np.matrix('3 1 4;1 2 2;1 3 6')
c = np.matrix('2 1;1 6')
matrices = np.array([a,b,c])
def our_func(m):
return np.prod(np.diagonal(m))
print(list(map(our_func, matrices)))
# [4, 36, 12]
答案 1 :(得分:1)
使用列表理解可以使这更简洁的一种方法是:
<job id="readMultiFileJob" xmlns="http://www.springframework.org/schema/batch">
<step id="step1" next="deleteDir">
<tasklet>
<chunk reader="multiResourceReader" writer="flatFileItemWriter"
commit-interval="1" />
</tasklet>
</step>
<step id="deleteDir">
<tasklet ref="fileDeletingTasklet">
</tasklet>
</step>
</job>