Python 如何检查二维numpy数组的第一列中是否已存在数字

Python 如何检查二维numpy数组的第一列中是否已存在数字,python,arrays,numpy,Python,Arrays,Numpy,如果数组A2的第一个数字不在数组A1的第一列中,我尝试用数组A2来vstack数组A1: A1 = np.array([]) numbers = [1,2,3,3,4,4,5,6,7,8,9] for number in numbers: if number not in A1[:,0]: A2 = [number,10] A1 = np.vstack((A1,A2)) 但是,当然,A1不是2D数组,因此A1[:,0]将生成索引器。错误:数组的索引太多 此时,我创

如果数组A2的第一个数字不在数组A1的第一列中,我尝试用数组A2来vstack数组A1:

A1 = np.array([])
numbers = [1,2,3,3,4,4,5,6,7,8,9]
for number in numbers:
   if number not in A1[:,0]:
      A2 = [number,10]
      A1 = np.vstack((A1,A2))
但是,当然,A1不是2D数组,因此A1[:,0]将生成
索引器。错误:数组的索引太多

此时,我创建了一个虚拟的空2D数组,然后压制虚拟值:

A1 = np.zeros(shape=(2,2))
numbers = [1,2,3,3,4,4,5,6,7,8,9]

for number in numbers:
   if number not in A1[:,0]:
      A2 = [number, 10]
      A1 = np.vstack((A1,A2))
A1 = A1[2:,:]
但是,好吧。。。我们都同意这样做很恶心


如何解决此问题?

numpy
数组当作列表来操作,效率低下,通常不是一个好主意

相反,请使用
numpy
提供的矢量化功能。下面是一个例子

import numpy as np

numbers = [1,2,3,3,4,4,5,6,7,8,9]

unique = np.unique(numbers)
constant = np.ones(len(unique)) * 10

A1 = np.vstack((unique, constant)).T
如果顺序很重要,请使用以下命令:

idx = np.unique(numbers, return_index=True)[1]
unique = numbers[sorted(idx)]

请记住,
np.unique
也会对数组进行排序。如果输入的数字没有排序,你会得到不同的输出。该死,我的例子太简单了,因为在我的例子中,我还需要最大化A2中第二个数字的值,它并不总是10。我将编辑我的问题。@obchardon,即使在这种情况下,也可以使用
numpy
:)@jpp您可以只做
unique=number[sorted(idx)]
,而不是列表