未知维度的Numpy索引数组?

未知维度的Numpy索引数组?,numpy,multidimensional-array,assertion,Numpy,Multidimensional Array,Assertion,我需要比较一组不同维度的numpy阵列,比如: a = np.array([1,2,3]) b = np.array([1,2,3],[4,5,6]) assert(a == b[0]) 如果我不知道a和b的形状,我怎么能这样做呢 len(shape(a)) == len(shape(b)) - 1 我也不知道从b中跳过哪个维度。我想使用np.index\u exp,但这似乎对我没有帮助 def compare_arrays(a,b,skip_row): u = np.index_

我需要比较一组不同维度的numpy阵列,比如:

a = np.array([1,2,3])
b = np.array([1,2,3],[4,5,6])
assert(a == b[0])
如果我不知道a和b的形状,我怎么能这样做呢

len(shape(a)) == len(shape(b)) - 1 
我也不知道从b中跳过哪个维度。我想使用np.index\u exp,但这似乎对我没有帮助

def compare_arrays(a,b,skip_row):
    u = np.index_exp[ ... ]
    assert(a[:] == b[u])
编辑
或者换句话说,如果我知道数组的形状和我想错过的维度,我就不想构造切片。如果我知道维度和位置的数量,在哪里放置“:”和在哪里放置“0”,我如何动态地创建np.index\u exp呢?

我只是在查看
apply\u沿\u轴
apply\u over \u轴
的代码,研究它们是如何构造索引对象的

让我们制作一个4d阵列:

In [355]: b=np.ones((2,3,4,3),int)
制作
切片的列表(使用列表*复制)

还是以你为例

In [361]: b = np.array([1,2,3],[4,5,6])   # missing []
...
TypeError: data type not understood

In [362]: b = np.array([[1,2,3],[4,5,6]])

In [366]: ind=[slice(None)]*b.ndim    
In [367]: ind[0]=0
In [368]: a==b[ind]
Out[368]: array([ True,  True,  True], dtype=bool)
这种索引基本上与
np.take
相同,但同样的思想可以扩展到其他情况

我不太明白你关于
使用的问题。请注意,在构建索引列表时,我使用
slice(None)
。解释器将所有索引
转换为
slice
对象:
[start:stop:step]=>slice(start,stop,step)


通常您不需要使用
a[:]==b[0]
<代码>a==b[0]
就足够了。列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表。我可能会使用它,但我如何给出“:”来定义范围?你所说的
跳过行或行是什么意思?或者你的意思是跳过维度?@hpaulj谢谢,我是指维度,更正。非常感谢。看起来我没有意识到“slice()”的构造,有了它,我确实可以构造任何类型和任何维度的索引,太完美了!
In [361]: b = np.array([1,2,3],[4,5,6])   # missing []
...
TypeError: data type not understood

In [362]: b = np.array([[1,2,3],[4,5,6]])

In [366]: ind=[slice(None)]*b.ndim    
In [367]: ind[0]=0
In [368]: a==b[ind]
Out[368]: array([ True,  True,  True], dtype=bool)