插入numpy数组的动态/参数化维度

时间:2017-04-30 19:41:45

标签: python numpy matrix multidimensional-array

我想编写一个函数,将矩阵中的矩阵插入到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:解决了要插入的矩阵的形状确定问题。

1 个答案:

答案 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,但它在公寓里运作。