在2D数组的每一行中,如果第0个元素小于4,我想将10分配给第0和第2列中的元素。
import numpy as np arr = np.array([[0,1,2],[3,4,5]]) arr[(arr[:,0] < 4), [0,2]] = 10 print(arr)
字符串实际结果
[[10 1 2] [ 3 4 10]]
型预期结果
[[10 1 10] [10 4 10]]
型
368yc8dk1#
将数组稍微大一点,使问题更有趣。
In [134]: arr = np.arange(9).reshape(3,3); arr Out[134]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
字符串行选择,作为布尔值和索引:
In [135]: (arr[:,0] < 4) Out[135]: array([ True, True, False]) In [136]: np.nonzero((arr[:,0] < 4)) Out[136]: (array([0, 1]),)
型如果我们只是两个列表(或数组)(大小相同);我们索引“对角线”。这就是你所得到的。
In [137]: arr[[0,1],[0,2]] Out[137]: array([0, 5])
型为了得到块或4个角,'行'索引必须是(2,1)形状:
In [138]: arr[[[0],[1]],[0,2]] Out[138]: array([[0, 2], [3, 5]])
型一个(2,1)数组broadcasts,其中有一个(2,)要选择为(2,2)块。我们不能把布尔掩码扩展到二维。但是我们可以用np.ix_来创建等价的数组对:
broadcasts
np.ix_
In [140]: I,J = np.ix_((arr[:,0]<4), [0,2]); I,J Out[140]: (array([[0], [1]]), array([[0, 2]]))
型然后使用它们来索引arr:
arr
In [141]: arr[I,J] = 10 In [142]: arr Out[142]: array([[10, 1, 10], [10, 4, 10], [ 6, 7, 8]])
1条答案
按热度按时间368yc8dk1#
将数组稍微大一点,使问题更有趣。
字符串
行选择,作为布尔值和索引:
型
如果我们只是两个列表(或数组)(大小相同);我们索引“对角线”。这就是你所得到的。
型
为了得到块或4个角,'行'索引必须是(2,1)形状:
型
一个(2,1)数组
broadcasts
,其中有一个(2,)要选择为(2,2)块。我们不能把布尔掩码扩展到二维。但是我们可以用
np.ix_
来创建等价的数组对:型
然后使用它们来索引
arr
:型