如何简化编码模式和重复

时间:2019-05-18 05:47:33

标签: python for-loop

是否可以通过使用for循环函数来简化重复代码?

def reshape_matrix(value1, value2, value3):
    renew_value1 = np.reshape(value1, (np.size(value1), 1), order='C')
    renew_value2 = np.reshape(value2, (np.size(value2), 1), order='C')
    renew_value3 = np.reshape(value3, (np.size(value3), 1), order='C')
    return renew_value1, renew_value2, renew_value3

a, b, c = reshape_matrix(A[[1,2,3], [1,2,3], [1,2,3]], B[[1,2,3], [1,2,3], [1,2,3]], C[[1,2,3], [1,2,3], [1,2,3]])

3 个答案:

答案 0 :(得分:3)

如果始终只有三个参数,则不值得进行优化。如果没有:

def reshape_matrix(*values):
    return tuple(np.reshape(v, (np.size(v), 1), order='C') for v in values)

较短的地方并不总是意味着更好,尤其是不是更好的可理解性/可读性。

答案 1 :(得分:1)

一种简化重复代码的方法是使用您所说的for循环。 但是,如果最多只有3个值,则没有理由更改当前使用的功能。

如果使用3个以上的值,请使用类似的

def reshape_matrix(*values):
    new_vals = ()
    for value in values:
        new_vals += (np.reshape(value, (np.size(value), 1),)
    return new_vals

答案 2 :(得分:1)

如果您知道矩阵始终为3x3,并且想要转换为9x1数组,则可以将尺寸直接传递给reshape

import numpy as np

def reshape_matrix(*values):

    return [np.reshape(item, (9,1)) for item in values]

x = np.array([[1,2,3], [1,2,3], [1,2,3]])

a, b, c = reshape_matrix(x,x,x)
print(a, b, c)

输出将为

[[1]
 [2]
 [3]
 [1]
 [2]
 [3]
 [1]
 [2]
 [3]] [[1]
 [2]
 [3]
 [1]
 [2]
 [3]
 [1]
 [2]
 [3]] [[1]
 [2]
 [3]
 [1]
 [2]
 [3]
 [1]
 [2]
 [3]]