Python Numpy使用矩阵索引插入矩阵值
我有以下代码创建4DPython Numpy使用矩阵索引插入矩阵值,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有以下代码创建4D网格矩阵,我希望将滚动的2DVAL矩阵插入该网格 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[:,
网格
矩阵,我希望将滚动的2DVAL
矩阵插入该网格
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)
如果VAL
是一个1D数组,我会使用1Dinsert_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]
的错误应该在我的脑海中为网格数组的y
和k
部分给出一个(5100)插入位置,然后用I
和0
修复x
和z
部分
有没有办法通过2D索引将2D(5100)滚动的
VAL
矩阵插入4D(10100,20,3)网格矩阵?网格是(y,k,x,z)
insert\u map
是(5,k,x)
<代码>插入映射[:,:,i]
然后是(5,k)
grid[insert_-map[:,:,i],i,0]
将成为(5,k,z)
<代码>插入映射[]
仅为第一个y
维度编制索引
vals
是(5,k)
<代码>滚动
不会改变这一点
np.roll(vals,i)[…,None]
可以广播以填充z
维度,如果您需要的话
您的insert\u映射
无法沿k
维度选择值。由randint
创建的值在y
维度中有效
如果i
和0
应该应用于最后两个维度,则仍然需要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]