Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用相应索引的元组替换多维数组的每个元素_Python_Arrays_Python 3.x_Numpy - Fatal编程技术网

Python 用相应索引的元组替换多维数组的每个元素

Python 用相应索引的元组替换多维数组的每个元素,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,在numpy中,假设我有一个数组k,它具有形状(2,3,2,2) 如何创建形状为(2,3,2,2)的新数组j,使j的每个元素都是k中相应值的索引 第一个维度的第一个元素和第二个维度的第一个元素中的示例。(对应于 [[[[-0.08759809, -0.10987781], [-0.18387192, -0.2109216 ]], ) 。。。。依此类推。使用的方法如下: j = np.fromiter(np.ndindex(k.shape), dtype='i4,'*k.ndim).res

在numpy中,假设我有一个数组
k
,它具有形状(2,3,2,2)

如何创建形状为(2,3,2,2)的新数组
j
,使
j
的每个元素都是
k
中相应值的索引

第一个维度的第一个元素和第二个维度的第一个元素中的示例。(对应于

[[[[-0.08759809, -0.10987781],
   [-0.18387192, -0.2109216 ]],
)

。。。。依此类推。

使用的方法如下:

j = np.fromiter(np.ndindex(k.shape), dtype='i4,'*k.ndim).reshape(k.shape)
结果:

array([[[[(0, 0, 0, 0), (0, 0, 0, 1)],
          [(0, 0, 1, 0), (0, 0, 1, 1)]],

        [[(0, 1, 0, 0), (0, 1, 0, 1)],
          [(0, 1, 1, 0), (0, 1, 1, 1)]],

        [[(0, 2, 0, 0), (0, 2, 0, 1)],
          [(0, 2, 1, 0), (0, 2, 1, 1)]]],


        [[[(1, 0, 0, 0), (1, 0, 0, 1)],
          [(1, 0, 1, 0), (1, 0, 1, 1)]],

        [[(1, 1, 0, 0), (1, 1, 0, 1)],
          [(1, 1, 1, 0), (1, 1, 1, 1)]],

        [[(1, 2, 0, 0), (1, 2, 0, 1)],
          [(1, 2, 1, 0), (1, 2, 1, 1)]]]],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4')])
数组([(0,0,0,0),(0,0,0,1)],
[(0, 0, 1, 0), (0, 0, 1, 1)]],
[[(0, 1, 0, 0), (0, 1, 0, 1)],
[(0, 1, 1, 0), (0, 1, 1, 1)]],
[[(0, 2, 0, 0), (0, 2, 0, 1)],
[(0, 2, 1, 0), (0, 2, 1, 1)]]],
[[[(1, 0, 0, 0), (1, 0, 0, 1)],
[(1, 0, 1, 0), (1, 0, 1, 1)]],
[[(1, 1, 0, 0), (1, 1, 0, 1)],
[(1, 1, 1, 0), (1, 1, 1, 1)]],
[[(1, 2, 0, 0), (1, 2, 0, 1)],
[(1, 2, 1, 0), (1, 2, 1, 1)]]]],

dtype=[('f0','一个简单的解决方案是迭代j,并用其索引
j[idx,:]=idx

k=np.round(np.random.random((4,5)),2)
j=np.empty(k.shape+(k.ndim,))
对于np.ndindex(k形)中的idx:
j[idx,:]=idx
#数组([[0,0.],
#         [0., 1.],
#         [0., 2.],
#         [0., 3.],
#         [0., 4.]],
#        [[1., 0.],
#         [1., 1.],
#         [1., 2.],
#         [1., 3.],
#         [1., 4.]],
#        [[2., 0.],
#         [2., 1.],
#         [2., 2.],
#         [2., 3.],
#         [2., 4.]],
#        [[3., 0.],
#         [3., 1.],
#         [3., 2.],
#         [3., 3.],
#         [3., 4.]]])

如果我们认为元组的长度为4的大小,而不是单个元素,那么它的大小将是(2, 3, 2,2, 4)。这能解决你的问题吗?如果是这样的话,请考虑接受/接受一个答案:+1谢谢你提醒我关于
np.ndindex
,我完全忘记了它的存在,而是在我最初的回答中使用了
np.ndenumerate
j = np.fromiter(np.ndindex(k.shape), dtype='i4,'*k.ndim).reshape(k.shape)
array([[[[(0, 0, 0, 0), (0, 0, 0, 1)],
          [(0, 0, 1, 0), (0, 0, 1, 1)]],

        [[(0, 1, 0, 0), (0, 1, 0, 1)],
          [(0, 1, 1, 0), (0, 1, 1, 1)]],

        [[(0, 2, 0, 0), (0, 2, 0, 1)],
          [(0, 2, 1, 0), (0, 2, 1, 1)]]],


        [[[(1, 0, 0, 0), (1, 0, 0, 1)],
          [(1, 0, 1, 0), (1, 0, 1, 1)]],

        [[(1, 1, 0, 0), (1, 1, 0, 1)],
          [(1, 1, 1, 0), (1, 1, 1, 1)]],

        [[(1, 2, 0, 0), (1, 2, 0, 1)],
          [(1, 2, 1, 0), (1, 2, 1, 1)]]]],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4')])