我试图索引某个矩阵,y
,然后用某个布尔语句重新索引该结果,并将y
中的对应元素设置为0
。下面显示了我用来测试这种索引方案的伪代码。设置索引索引数组时的Numpy数组值
x=np.zeros([5,4])+0.1;
y=x;
print(x)
m=np.array([0,2,3]);
y[0:4,m][y[0:4,m]<0.5]=0;
print(y)
我不确定为什么它不起作用。输出我想:
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
[[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0.1 0.1 0.1 0.1]]
但我实际上得到:
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
我敢肯定,我错过了一些在引擎盖细节,解释了为什么这是行不通的。有趣的是,如果您将m
替换为:
,那么分配工作。出于某种原因,选择列的一个子集不会让我分配零。
如果有人可以解释发生了什么,并帮助我找到一种替代解决方案(希望这种解决方案不涉及生成临时numpy阵列,因为我的实际y
将会非常巨大),我会非常感激!谢谢!
编辑: y[0:4,:][y[0:4,:]<0.5]=0;
y[0:4,0:3][y[0:4,0:3]<0.5]=0;
等
如预期的所有工作。看起来问题是当你用某种列表进行索引时。
你可能会使用一些随机数而不是所有的'0.1',像'np.random.rand(5,4)'这样的输入,并显示我们预期的输出? – Divakar
我最初使用所有随机数进行测试,这是我最初遇到问题的地方。只是因为它具有更高的可重复性,我转而使用所有的“0.1”。 –
你可以在开始时使用'np.random.seed(1234)'来获得可重复的随机数。 – Divakar