Python 高维数组的numpy.where行为是否不稳定?
。。。还是我的错 我有一个七维数组,Python 高维数组的numpy.where行为是否不稳定?,python,numpy,Python,Numpy,。。。还是我的错 我有一个七维数组,shape=(5,5,5,5,5,5),主要由零和一些(~10)非零元素填充 我观察到,在某些情况下,numpy.where不会返回人们期望数组元组具有的值。形状正确,即对于具有10个非零元素的七维数组,一个具有7个元素(每个轴一个)的元组,每个元素都是10个元素的数组(坐标沿该轴)。有时所有这些数组都相同,有时则不同 我运行Windows 10,这是我的python安装: win32上的Python 3.5.3 | Continuum Analytics,I
shape=(5,5,5,5,5,5)
,主要由零和一些(~10)非零元素填充
我观察到,在某些情况下,numpy.where
不会返回人们期望数组元组具有的值。形状正确,即对于具有10个非零元素的七维数组,一个具有7个元素(每个轴一个)的元组,每个元素都是10个元素的数组(坐标沿该轴)。有时所有这些数组都相同,有时则不同
我运行Windows 10,这是我的python安装:
win32上的Python 3.5.3 | Continuum Analytics,Inc.(默认,2017年2月22日,21:28:42)[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安装或系统的问题造成的问题?我无法在Linux上复制这种行为python 3.5.4 | Continuum Analytics,Inc.|(默认,2017年8月14日,13:26:58)[GCC 4.4.7 20120313(Red Hat 4.4.7-1)]。。。至少有3^18个元素的数组。这似乎是从numpy-1.13.0-py35_0
到numpy-1.13.1-py35_0
的更新。我现在无法为最多5^12或3^18个元素的数组重现该错误。