......或者是我的错?
我有一个七维数组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安装或系统的问题?