【发布时间】:2020-04-20 19:37:55
【问题描述】:
我的代码有错误,我使用最简单的示例重新创建了它:
import numpy as np
zeros_4d = np.zeros((5,10,15,1))
zeros_3d = np.zeros((10,15,1))
ones_3d = zeros_3d + 1
bool_array = np.arange(0,15,1)>8
zeros_3d[:,9:,:] = ones_3d[:,9:,:] # This works fine
zeros_3d[:,bool_array,:] = ones_3d[:,bool_array,:] # This works fine
zeros_4d[0,:,9:,:] = ones_3d[:,9:,:] # This works fine
for i in np.arange(0,5,1):
zeros_4d[0,i,bool_array,:] = ones_3d[i,bool_array,:] # This works fine and does what I want
zeros_4d[0,:,bool_array,:] = ones_3d[:,bool_array,:] # This does not work
我收到此错误消息:'ValueError: shape mismatch: value array of shape (10,6,2) could not be broadcast to indexing result of shape (6,10,2)'
我不明白为什么会发生这种情况,有什么办法可以解决这个问题,或者正在循环最好的方法来解决这个问题。
【问题讨论】:
-
你想达到什么目的?
-
我想,3d 数组在我的真实代码中更小。例如,4d 数组的形状为 (5,10,15,2),3d 数组的形状为 (10,5,2),我想使用布尔索引将 3d 数组输入到 4d 数组中.我想在不使用循环的情况下执行此操作,因为我认为如果我正确执行它应该是可能的。
-
zeros_4d[0,:,bool_array,:]索引是基本和高级的混合,中间有一个切片。这是一个特殊的记录案例,docs.scipy.org/doc/numpy/reference/…。所有切片维度都被推到最后,在布尔索引之后。 -
谢谢你,@hpauji,我会花很长时间才能弄清楚这一点。第一次在这里发帖,但您的评论似乎足以回答。
标签: python numpy variable-assignment matrix-indexing