【发布时间】:2018-07-29 05:47:48
【问题描述】:
a=np.arange(240).reshape(3,4,20)
b=np.arange(12).reshape(3,4)
c=np.zeros((3,4),dtype=int)
x=np.arange(3)
y=np.arange(4)
我想通过以下步骤获得一个 2d (3,4) 形状数组,无需循环。
for i in x:
c[i]=a[i,y,b[i]]
c
array([[ 0, 21, 42, 63],
[ 84, 105, 126, 147],
[168, 189, 210, 231]])
我试过了,
c=a[x,y,b]
但它显示
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (4,) (3,4)
然后我也尝试通过[:,None]建立newaxis,还是不行。
【问题讨论】:
-
"我也尝试通过 [:,None] 建立 newaxis,它也不起作用。"始终发布您尝试的确切内容,因为这种方法(如果正确完成)按照下面的答案工作......
-
你想要一个 (3,4),而
b就是这个形状。其他索引必须广播到相同的形状。
标签: python arrays numpy indexing array-broadcasting