我有一个 numpy 矩阵,我想用函数的结果填充它。此函数返回将映射到矩阵的一行中的整数值映射。
函数返回的值如下:
{1:6, 2:3, 3:2, 4:2, 5:1}
然后,我编写了以下代码来将值填充到矩阵中:
results = np.empty((10, 5), dtype=int)
for i in range(10):
result = method()
for j in range(5):
results[i, j] = result[j]
我想知道是否有更合适/更有效的方法来使用 python 执行此操作?
最佳答案
您可以简单地从字典中获取值,然后使用 np.full
创建您期望的矩阵:
>>> d={1:6, 2:3, 3:2, 4:2, 5:1}
>>> vals=d.values()
>>> np.full((10,5),list(vals))
array([[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.],
[ 6., 3., 2., 2., 1.]])
如果 method
函数在每次迭代中返回不同的结果,您可以使用列表理解来创建矩阵:
l = np.array([list(method().values()) for _ in range(1, 11)])
注意:由于你的字典键是排序的数字,在这种情况下你的键有一个排序的哈希值,dict.values
方法返回一个基于你的键的排序值:
>>> list(map(hash, range (1 , 6)))
[1, 2, 3, 4, 5]
如果您的键不是排序的数字,您可以使用 collections.OrderedDict 让您的方法函数返回一个有序的字典。 .
但请注意,由于 OrderedDict
是按插入排序的,如果这是您想要的,您可以使用它。但是,如果您想根据键进行排序,则可以使用以下方法获取值:
[map(dict.get, range(1, 6)) for _ in range(10)]
关于python - 如何从 map 中获取值并将它们设置为 numpy 矩阵行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32868385/