在numpy中选择元素

2024-10-19 16:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

a = np.arange(4).reshape(2, 2)
a
[[0, 1]
[2, 3]]
a[  a==[0, 1] ][0] = 1 

应为a = [[1, 1], [2, 3]],但“a”没有更改。是什么导致了这个问题。谢谢


Tags: nparangereshape
2条回答

如果你查看a==[0, 1],你会发现它返回一个

array([[False,  True],
       [False, False]])

已经有了。所以你只需要:

a = np.arange(4).reshape(2, 2)
a[a==[0,1]]=1
a
# array([[1, 1],
#        [2, 3]])

这里的问题是您试图分配给数组的副本,而不是视图,因此ndarray保持不变。你知道吗

一种方法是使用^{}

replace_with = np.vstack([np.ones(a.shape[0]), a[:,1]])
np.where((a==[0,1]).all(1)[:,None], replace_with, a)

array([[1., 1.],
       [2., 3.]])

这里的replace_with是一个ndarray,第一列是1,第二列是a的内容,因为这似乎就是你想要做的:

print(replace_with)

array([[1., 1.],
       [1., 3.]])

相关问题 更多 >