【问题标题】:Numpy insert matrix values with matrix indexNumpy 使用矩阵索引插入矩阵值
【发布时间】:2021-02-05 12:10:51
【问题描述】:

我有以下代码创建一个 4D grid 矩阵,我希望将滚动的 2D vals 矩阵插入到这个网格中。

import numpy as np

k = 100
x = 20
y = 10
z = 3

grid = np.zeros((y, k, x, z))
insert_map = np.random.randint(low=0, high=y, size=(5, k, x))
vals = np.random.random((5, k))

for i in range(x):
    grid[insert_map[:, :, i], i, 0] = np.roll(vals, i)

如果 vals 是一维数组,我会使用一维 insert_map 数组作为参考,它会起作用,但是在多个维度上使用它似乎是一个问题,并且会引发错误:

ValueError: shape mismatch: value array of shape (5,100)  could not be broadcast to indexing result of shape (5,100,3)

我很困惑为什么它说 grid[insert_map[:, :, i], i, 0] 的错误应该在我的脑海中为网格数组的 yk 部分提供 (5, 100) 插入位置,然后修复 @ 987654330@ 和 z 部分与 i0?

有没有办法通过二维索引将2D(5、100)滚动vals矩阵插入到4D(10、100、20、3)grid矩阵中?

【问题讨论】:

    标签: python arrays numpy matrix


    【解决方案1】:

    grid(y, k, x, z)

    insert_map(5, k, x)insert_map[:, :, i](5,k)

    grid[insert_map[:, :, i], i, 0] 将成为(5,k,z)insert_map[] 仅索引第一个 y 维度。

    vals(5,k)roll 不会改变这一点。

    np.roll(vals, i)[...,None] 可以广播以填充z 维度,如果这是您想要的。

    您的 insert_map 无法选择沿 k 维度的值。由randint 创建的值在y 维度上有效。

    如果i0 应该应用于最后两个维度,您仍然需要k 维度的索引。可能性是:

    grid[insert_map[:, j, i], j, i, 0]
    grid[insert_map[:, :, i], 0, i, 0]
    grid[insert_map[:, :, i], :, i, 0]
    grid[insert_map[:, :, i], np.arange(k), i, 0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2021-06-29
      • 2013-11-18
      相关资源
      最近更新 更多