这似乎是一个简单的问题,但我无法弄清楚。
我有一个任意维度(等级)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的等级直到运行时才知道,有什么想法吗?
答案 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.]]])