如何检查数字是否已经在2d numpy数组的第一列中

时间:2018-04-09 13:49:58

标签: python arrays numpy

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

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]会产生IndexError: too many indices for array

目前我创建了一个虚拟的空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:,:]

但是,好吧......我们都同意这样做很恶心......

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

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)]