【问题标题】:Passing a collection of arrays to function argument将数组集合传递给函数参数
【发布时间】:2017-09-03 14:59:33
【问题描述】:

如何创建数组集合并将其传递给函数,让函数对集合中的每个数组执行操作并将数组(可能以集合形式)返回到例程?数组需要保持它们的身份(通过引用传递到操作函数和从操作函数传递)。这将帮助我清理和压缩我当前的代码。我不是专业的程序员,所以我意识到我的代码可以大大改进。任何指导表示赞赏。

当前代码示例:

import numpy as np

# Function that performs some operation on array (matrix)
def addLine(x):
    x = np.vstack([x,np.random.rand(1,5)])
    return x

def mainLoop():
    A = np.zeros((1,5),dtype=np.float32)
    B = np.ones((1,5),dtype=np.float32)
    C = np.ones((1,5),dtype=np.float32)

    # Do stuff

    A = addLine(A)
    B = addLine(B)
    C = addLine(C)

我想做的事:

# Function that accepts a collection of arrays as argument, performs 
# operation, and returns modified arrays to the same identity / name     
def addLines(x):
    for n in range(len(x)):
        x[n] = addLine(x)
        return x[n]

def mainLoop():
    A = np.zeros((1,5),dtype=np.float32)
    B = np.ones((1,5),dtype=np.float32)
    C = np.ones((1,5),dtype=np.float32)

    # Do stuff
    # Create a collection of all arrays to perform operations on
    AllArrays = [A,B,C]

    # Pass collection of arrays to function (I likely need a for loop here)
    AllArrays = addLines(AllArrays)

    # Perform further operations on individual arrays
    A = A+2
    B = B+1
    C = C-1

【问题讨论】:

    标签: python arrays python-3.x multidimensional-array


    【解决方案1】:

    这个细微的变化怎么样?

    def addLine(*args):
        args = map(lambda x: np.vstack([x,np.random.rand(1,5)]), *args)
        return args
    
    AllArrays = addLine(AllArrays)
    
    A, B, C = AllArrays
    
    A
    
    array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
           [ 0.66237197,  0.07125813,  0.5454597 ,  0.44901189,  0.89820099]])
    

    【讨论】:

    • 谢谢@aws_apprentice,我会试试这个。
    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多