numpy.where对高维数组的行为是否不正常?

时间:2018-01-31 12:55:52

标签: python numpy

......或者是我的错?

我有一个七维数组shape=(5,5,5,5,5,5,5),主要用零和几个(~10)非零元素填充。

我观察到,在某些情况下,numpy.where不会返回人们期望数组元组具有的值。形状是正确的,即对于具有10个非零元素的七维阵列,具有7个元素(每个轴一个)的元组,每个元素是10个元素阵列(沿着该轴的坐标)。有时所有这些数组都是相同的,有时它们不是。

我运行Windows 10,这是我的python安装:

  

Python 3.5.3 | Continuum Analytics,Inc。| (默认情况下,2017年2月22日,21:28:42)[winv3上的MSC v.1900 64位(AMD64)]

以下是一些重现错误的代码:

import numpy as np

for i in range(5,11):
    print("dims:", i)
    A = np.zeros([5]*i)
    print("shape:", A.shape)
    for j in range(10):
        c = np.random.randint(low=0, high=5, size=i)
        A[tuple(c)] = j
        print(tuple(c), ":", j)
    print(np.where(A))

5个维度的示例输出:

(0, 4, 1, 2, 1) : 0
(2, 0, 3, 1, 4) : 1
(3, 2, 0, 0, 4) : 2
(0, 4, 0, 2, 0) : 3
(4, 2, 4, 4, 3) : 4
(3, 3, 4, 3, 1) : 5
(1, 2, 1, 3, 4) : 6
(0, 4, 0, 4, 0) : 7
(4, 4, 0, 4, 2) : 8
(4, 0, 0, 2, 3) : 9
(array([0, 0, 1, 2, 3, 3, 4, 4, 4], dtype=int64), array([4, 4, 2, 0, 2, 3, 0, 2, 4], dtype=int64), array([0, 0, 1, 3, 0, 4, 0, 4, 0], dtype=int64), array([2, 4, 3, 1, 0, 3, 2, 4, 4], dtype=int64), array([0, 0, 4, 4, 4, 1, 3, 3, 2], dtype=int64))

和10个维度的输出,在同一个运行中 - 注意结果元组中的所有数组是如何相同的:

(0, 3, 3, 4, 4, 4, 1, 3, 2, 1) : 0
(0, 2, 3, 0, 2, 0, 1, 0, 3, 4) : 1
(4, 1, 3, 3, 3, 3, 2, 3, 2, 3) : 2
(2, 3, 1, 3, 1, 1, 1, 4, 1, 4) : 3
(4, 0, 2, 3, 4, 1, 3, 0, 4, 0) : 4
(3, 0, 0, 0, 3, 4, 3, 2, 3, 4) : 5
(2, 4, 0, 2, 2, 1, 4, 2, 2, 2) : 6
(1, 1, 0, 4, 1, 3, 2, 0, 3, 2) : 7
(4, 1, 2, 4, 1, 3, 1, 2, 4, 1) : 8
(0, 2, 0, 1, 0, 1, 4, 1, 1, 2) : 9
(array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64), array([0, 0, 1, 2, 2, 3, 4, 4, 4], dtype=int64))

有时错误发生在> = 8维,有时是9。

这是我对numpy.where的理解,numpy中的错误,还是我的python安装或系统的问题?

0 个答案:

没有答案