python - 如何从 map 中获取值并将它们设置为 numpy 矩阵行?

标签 python numpy matrix python-3.4

我有一个 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/

相关文章:

python - 如何使用 multiprocessing.Pool.apply_async 记录到单个文件

python - 使用 openCV 和 python 旋转 2D 点

将一个向量提升为另一个向量的幂

python-2.7 - 如何更新 pandas 数据框列中的值,直到同一列中第一次出现值?

python - 如何从 9 个大小为 N 的数组快速创建 N 个 3x3 矩阵的数组?

python - 带有 numpy 的 N*M*M 张量的矢量化(部分)逆

python - Keras:无法将输入数组从形状 (14,1) 广播到形状 (14)

python - Pandas 数据转换

python - 无法通过 Python API 更改我的 Picasa 网络相册相册的日期

python - 向量化内存函数