如何在 python 中拥有一个具有与输入相关的输出对象名称的函数?

问题描述 投票:0回答:4

目标是创建一个单位矩阵生成器函数。

def idmatrix(n):
  idnmatrix=[]
  ... #method to add rows and columns with values
  return idnmatrix

例如,我是否使用过

def idmatrix(2):

我会得到输出:

id2matrix

这将是:

id2matrix=[[1,0],[0,1]]

这适用于我想使用的任何“n”:

id3matrix, id4matrix, etc...
python python-2.7
4个回答
1
投票
def idmatrix(size):
    matrix = [[0]*size for i in range(size)]
    for i in range(size):
        matrix[i][i] = 1
    return matrix

id1matrix = idmatrix(1)
id2matrix = idmatrix(2)
id3matrix = idmatrix(3)
id4matrix = idmatrix(4)

1
投票

函数中返回的任何内容都没有变量名。在Python中,变量和它们映射到的对象是独立的。 您只能通过调用函数来手动设置变量名称:

ind2matrix = idmatrix(2)

但是,您可以做的是在函数中创建矩阵及其名称:

def idmatrix(n):
    idnmatrix=[]
    ... #method to add rows and columns with values
    return idnmatrix, 'id{}matrix'.format(n)

其中

'id{}matrix'.format(n)
字符串格式。例如,
'id{}matrix'.format(2)
创建字符串
'id2matrix'

因此,您的函数现在返回一个

tuple
,其中第一个条目是实际矩阵,第二个条目是它的名称。 此外,为了收集许多名称和矩阵,您可以将它们放入字典中。因此,您就有了从名称到值的映射:

mat_dict = {}
for n in range(10):
    matrix, name = idmatrix(n)
    mat_dict[name] = matrix

因此

print mat_dict
会打印类似这样的内容(不一定按照这个特定顺序):

   {'id3matrix': [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]],     
     'id2matrix': [[1.0, 0.0], [0.0, 1.0]], 
     'id1matrix': [[1.0]], 
     'id0matrix': [], 
     ... }

0
投票

如果您想返回具有预期名称的矩阵,您可以使用字典来返回两者,并且您可以使用

numpy
来创建您的单位矩阵:

>>> def idmatrix(n):
...     return {'id{}matrix'.format(n):np.matrix(np.identity(n), copy=False)}
... 
>>> idmatrix(4)
{'id4matrix': matrix([[ 1.,  0.,  0.,  0.],
                      [ 0.,  1.,  0.,  0.],
                      [ 0.,  0.,  1.,  0.],
                      [ 0.,  0.,  0.,  1.]])}

使用 python,你可以使用嵌套列表理解:

>>> def idmatrix(n):
...     return {'id{}matrix'.format(n):[[1 if j==i else 0 for j in range(n)] for i in range(n)]}
... 
>>> idmatrix(4)
{'id4matrix': [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]}

0
投票

使用 Numpy 检查。

import numpy as np
def idmatrix_np(size):
    return np.identity(size)

示例或调用功能。

size = 4 
identity_matrix = idmatrix_np(size)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.