【问题标题】:Is there a way to do array-based indexing in NumPy so that indices corresponding to all possible combinations of indexing array elements are selected? [duplicate]有没有办法在 NumPy 中进行基于数组的索引,以便选择与索引数组元素的所有可能组合相对应的索引? [复制]
【发布时间】:2020-02-10 16:10:53
【问题描述】:
arr = np.zeros([5,5])
idx_arr = np.array([1,3,4])

arr[idx_arr, idx_arr] += 1
print(arr)

上面给出了以下输出:

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

我正在寻找以下输出:

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

在 R 中,这种形式的索引相当于:

df[c(1,2,3),c(1,2,3)]

这将产生一个 3 x 3 的数据框或矩阵子部分。

任何帮助将不胜感激!

【问题讨论】:

  • 在这里广播。 arr[idx_arr[:, None], idx_arr] +=1

标签: python arrays numpy indexing


【解决方案1】:

您可以通过向其中一个索引数组添加维度来获得此结果,因此 较小的在较大的广播:

arr[idx_arr[:,None], idx_arr] += 1
print(arr)

[[0. 0. 0. 0. 0.]
 [0. 1. 0. 1. 1.]
 [0. 0. 0. 0. 0.]
 [0. 1. 0. 1. 1.]
 [0. 1. 0. 1. 1.]]

或者也可以使用np.ix_:

arr[np.ix_(idx_arr, idx_arr)] += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 2019-07-12
    • 1970-01-01
    • 2013-06-26
    • 2014-06-04
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多