通过列表理解设置numpy数组值

时间:2018-10-17 15:10:05

标签: python numpy list-comprehension

我可以更改numpy矩阵的一组值,以列表的形式传递要更改的索引,例如matrix[[some first indices], [some second indices]] = 1

我正在尝试执行此操作,但是仅使用一个索引列表,然后将该列表的每个元素作为第一个索引,将整个列表作为另一个索引。这里是示例:

import numpy as np

#Matrix
matrix = np.zeros((5,5))

# Indices
elements = [1,2,3]

# Way that works
for i in elements:
    matrix[i, elements] = 1

我想以此做为列表理解,但是我不知道怎么做,而且我不确定这是否是一个好习惯。像matrix[[(i,elements) for i in elements]] = 1

还考虑使用itertools进行操作,例如matrix[(itertools.permutation(elements, 2))] = 1。但是,这些方法中的任何一种都有效,我不确定为什么。

2 个答案:

答案 0 :(得分:3)

您需要使用行和列数组作为索引访问2d矩阵:

CRITERIAVALUE

答案 1 :(得分:2)

您可以从slice的第一个元素到最后一个元素(+1)创建一个elements(前提是已订购elements):

s = slice(elements[0], elements[-1]+1)

matrix[s, elements]= 1 
# [[0. 0. 0. 0. 0.]
# [0. 1. 1. 1. 0.]
# [0. 1. 1. 1. 0.]
# [0. 1. 1. 1. 0.]
# [0. 0. 0. 0. 0.]]