Python 使用Numpy数组创建唯一数组

Python 使用Numpy数组创建唯一数组,python,arrays,numpy,unique,Python,Arrays,Numpy,Unique,能否创建一个包含所有唯一值的numpy数组 myArray = numpy.random.random_integers(0,100,2500) myArray.shape = (50,50) 这里我有一个给定的随机50x50numpy数组,但是我可以有非唯一的值。是否有办法确保每个价值都是唯一的 多谢各位 更新: 我创建了一个基本函数来生成一个列表并填充一个唯一的整数 dist_x = math.sqrt(math.pow((extent.XMax - extent.XMin

能否创建一个包含所有唯一值的numpy数组

myArray = numpy.random.random_integers(0,100,2500)
myArray.shape = (50,50)
这里我有一个给定的随机50x50numpy数组,但是我可以有非唯一的值。是否有办法确保每个价值都是唯一的

多谢各位

更新: 我创建了一个基本函数来生成一个列表并填充一个唯一的整数

        dist_x = math.sqrt(math.pow((extent.XMax - extent.XMin), 2))
        dist_y = math.sqrt(math.pow((extent.YMax - extent.YMin),2))
        col_x = int(dist_x / 100)
        col_y = int(dist_y / 100)
        if col_x % 100 > 0:
            col_x += 1
        if col_y % 100 > 0:
            col_y += 1
        print col_x, col_y, 249*169
        count = 1
        a = []

        for y in xrange(1, col_y + 1):
            row = []
            for x in xrange(1, col_x + 1):
                row.append(count)
                count += 1
            a.append(row)
            del row

        numpyArray = numpy.array(a)
有更好的方法吗


谢谢

从集合中获取唯一随机样本最方便的方法可能是使用
replace=False

例如:

import numpy as np

# create a (5, 5) array containing unique integers drawn from [0, 100]
uarray = np.random.choice(np.arange(0, 101), replace=False, size=(5, 5))

# check that each item occurs only once
print((np.bincount(uarray.ravel()) == 1).all())
# True
当然,如果
replace=False
您从中采样的集合必须至少与您尝试提取的样本数相同:

np.random.choice(np.arange(0, 101), replace=False, size=(50, 50))
# ValueError: Cannot take a larger sample than population when 'replace=False'

如果您要查找的只是1和数组中元素数之间的整数的随机排列,您也可以这样使用:

nrow, ncol = 5, 5
uarray = (np.random.permutation(nrow * ncol) + 1).reshape(nrow, ncol)

只需使用replace=False

import numpy as np


def generate():
    global x
    powerball = np.random.randint(1,27)
    numbers = np.random.choice(np.arange(1, 70), replace=False, size=(1, 5))
    x = numbers, powerball
    return x

generate()

您似乎需要2500个介于0和100之间的唯一随机整数。这应该很明显为什么不会发生…我在问是否有一个内置的方法或一个快速的方法来做到这一点?你需要随机数,或只是唯一的?如果只是唯一的,可能是np.random.permutation(np.arange(N))?那么如果我知道列/行的数量,我应该能够做到这一点?numpyArray=numpy.random.choice(numpy.arange(1,(列x*列y)+1),replace=0,size=(列x,列y))。这将导致我在矩阵中的每个列/行位置获得允许的唯一值的正确大小。好吧,如果您只想对(包括)范围
[1,col\u x*col\u y]
中的元素进行随机排列,您最好使用
(np.random.permutation(col\u x*col\u y)+1)。重塑(col\u x,col\u y)
,正如我所想,oja暗示的那样。