索引Nd数组,其中包含python

时间:2015-09-04 02:39:04

标签: python numpy

这似乎是一个简单的问题,但我无法弄清楚。

我有一个任意维度(等级)N的numpy数组。我需要将数组中的单个元素设置为0,由长度为N的1D数组中的索引值给出。例如:

import numpy as np
A=np.ones((2,2,2))
b=[1,1,1]

所以起初我以为

A[b]=0

会做这项工作,但事实并非如此。 如果我知道A的等级为3,那么这样做就是一个简单的例子:

A[b[0],b[1],b[2]]=0

但A的等级直到运行时才知道,有什么想法吗?

1 个答案:

答案 0 :(得分:3)

numpy中的索引有somewhat complicated rules。在您的特定情况下,此警告适用:

  

高级索引的定义意味着x[(1,2,3),]x[(1,2,3)]根本不同。后者等同于x[1,2,3],它将触发基本选择,而前者将触发高级索引。一定要明白为什么会这样。

     

同时认识到x[[1,2,3]]将触发高级索引,而x[[1,2,slice(None)]]将触发基本切片。

您想要简单的索引(寻址特定元素),因此您必须将列表转换为元组:

A[tuple(b)] = 0

结果:

>>> A
array([[[ 1.,  1.],
        [ 1.,  1.]],

       [[ 1.,  1.],
        [ 1.,  0.]]])