我想编写一个函数,将矩阵中的矩阵插入到numpy数组中。其中维度作为函数的参数给出。但是,我正在努力维持这个维度是动态的。如果我知道这样的维度会起作用:
a = np.ones((2,3,4))
print a
[[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]]
a[:, 0, :] = np.ones((2,4))*2
print a
[[[2. 2. 2. 2.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
[[2. 2. 2. 2.] [1. 1. 1. 1.] [1. 1. 1. 1.]]]
如何使尺寸I插入2x4(或2x3,3x4)矩阵动态?
换句话说,假设arr.shape =(2,3,4):
f(arr, i=1, dim=0)
# this would perform the following:
arr[1, :, :] = np.ones((3,4))*2
,而
f(arr,i=0, dim=2)
# would perform the following:
arr[:,:, 0] = np.ones((2,3))*2
PS:解决了要插入的矩阵的形状确定问题。
答案 0 :(得分:1)
我想你想要'设置'这些版本'得到':
In [155]: arr=np.arange((2*3*4)).reshape(2,3,4)
In [156]: arr[0]
Out[156]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [157]: arr[:,0]
Out[157]:
array([[ 0, 1, 2, 3],
[12, 13, 14, 15]])
In [158]: arr[:,:,0]
Out[158]:
array([[ 0, 4, 8],
[12, 16, 20]])
np.s_
告诉我们其中一个索引元组是什么样的:
In [160]: np.s_[:,:,0]
Out[160]: (slice(None, None, None), slice(None, None, None), 0)
所以我们可以从头开始构建它。例如,使用元组连接:
In [161]: idx=(slice(None),)*2+(0,)
In [162]: idx
Out[162]: (slice(None, None, None), slice(None, None, None), 0)
In [164]: arr[idx]
Out[164]:
array([[ 0, 4, 8],
[12, 16, 20]])
这足以让你进入广义功能吗?
np.take
可让您对特定轴进行索引,但我认为不存在put
等效值。有一个put
,但它在公寓里运作。