您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

带有高级混合索引的Numpy子数组分配

带有高级混合索引的Numpy子数组分配

在将代码复制到问题时似乎有一些错误

但是我怀疑索引存在一个已知问题:

In [73]: a=np.zeros((2,3,4)); b=np.ones((3,4)); I=np.array([0,1])

制作I2个元素。标引b给出预期的(3,2)形状。切片中的3行,I索引中的2列

In [74]: b[:,I].shape
Out[74]: (3, 2)

但是使用3d,a我们可以获得转置。

In [75]: a[0,:,I].shape
Out[75]: (2, 3)

和分配会产生错误

In [76]: b[:,I]=a[0,:,I]
...
ValueError: array is not broadcastable to correct shape

它将2元素的尺寸由I一个定义,将3元素的尺寸从:第二个定义。这是前面已经讨论过的混合高级索引的一种情况-也存在一个错误问题。(我必须查一下)。

您可能正在使用较新的numpy(或scipy)并获得了不同的错误消息。

据记录,索引有两个数组或列表,中间是切片,将切片放在末尾,例如

In [86]: a[[[0],[0],[1],[1]],:,[0,1]].shape
Out[86]: (4, 2, 3)

发生同样的事情a[0,:,[0,1]]。但是有一个很好的论点,那就是不应该这样。

至于修复,您可以转置值或更改索引

In [88]: b[:,I]=a[0:1,:,I]

In [90]: b[:,I]=a[0,:,I].T

In [91]: b
Out[91]: 
array([[ 0.,  0.,  1.,  1.],
       [ 0.,  0.,  1.,  1.],
       [ 0.,  0.,  1.,  1.]])

In [92]: b[:,I]=a[0][:,I]

https://github.com/numpy/numpy/issues/7030

https://github.com/numpy/numpy/pull/6256

其他 2022/1/1 18:39:32 有327人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶