如果数组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:,:]
但是,好吧......我们都同意这样做很恶心......
如何解决此问题?
答案 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)]