在 numpy 数组中的多个索引上设置值

我有以下 python 代码片段:


import numpy as np



# Some random array

x = np.random.rand(34, 176, 256)

# Get some indexes

pos_idx = np.argwhere(x > 0.5)

# Sample some values from these indexes

seeds = pos_idx[np.random.choice(pos_idx.shape[0], size=5, replace=False), :]

# Now create another array

y = np.zeros_like(x, np.uint8)

y[seeds] = 1

最后一行给出了如下错误:


index 77 is out of bounds for axis 0 with size 34

但我不确定这是怎么发生的,因为所有采样索引都应该有效,因为它们是一个子集。


HUX布斯
浏览 166回答 3
3回答

MYYA

它将种子中的值视为第一维的索引。要通过种子中的索引访问元素,您可以使用:y[seeds[:,0],seeds[:,1],seeds[:,2]] = 1

哆啦的时光机

此代码将帮助您将值设置为 1import numpy as np# Some random arrayx = np.random.rand(34, 176, 256)# Get some indexespos_idx = np.argwhere(x > 0.5)# Sample some values from these indexesseeds = pos_idx[np.random.choice(pos_idx.shape[0], size=5, replace=False), :]# Now create another arrayy = np.zeros_like(x, np.uint8)for i in seeds:    y[tuple(i)] = 1

慕码人2483693

种子的形状是否正确?如果我理解正确的话,x有随机值;y与 x 具有相同的形状,但全为零;andseeds是一些索引值,这些位置将被设置为一个。print('x    : ', x.ndim, x.shape)print('y    : ', y.ndim, y.shape)print('seeds: ', seeds.ndim, seeds.shape)x    :  3 (34, 176, 256)y    :  3 (34, 176, 256)seeds:  2 (5, 3)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python