【问题标题】:Indexing matrix elements when input arrays are equal当输入数组相等时索引矩阵元素
【发布时间】:2019-06-22 05:28:51
【问题描述】:

我有一个矩阵,我希望能够在不使用循环的情况下用两个数组索引某些元素时更改它们的值

例如

import numpy as np

A = np.array([[0, 0, 0, 0],
              [0, 0, 0, 0],
              [0, 0, 0, 0]])
b = np.array([0, 1, 2])
c = np.array([2, 3, 1, 1])

如果 b 中的索引 i 等于 c 中的索引 j 则访问 A[i,j]

我试过了

A[b, c] = 1

和

A[b == c] = 1

但我没有得到正确的结果 我相信结果应该是

A = array([[0, 0, 0, 0],
           [0, 0, 1, 1],
           [1, 0, 0, 0]])

【问题讨论】:

  • 你的意思是np.array不仅仅是array ..对吗?
  • 是的,对不起。我正在使用 numpy
  • 您需要遍历b 和c 以查看哪些索引相等...我相信这是最直接的方法??
  • 我应该指定,但我特意寻找一种没有任何循环的方法
  • 没有循环并且形状不同,这应该很有趣。

标签: python arrays numpy matrix indexing


【解决方案1】:

您可以使用numpy.meshgrid 将一维索引数组扩展为二维索引数组:

import numpy as np

A = np.array([[0, 0, 0, 0],
              [0, 0, 0, 0],
              [0, 0, 0, 0]])
b = np.array([0, 1, 2])
c = np.array([2, 3, 1, 1])

C,B = np.meshgrid(c,b)
A[B==C] = 1

print(A)

给予

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

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多