如何使用fromiter构造一个np.array
发布时间:2020-12-20 12:20:57 所属栏目:Python 来源:网络整理
导读:我试图通过从 python生成器中取样来构造一个np.array,每次调用next时会生成一行数组.以下是一些示例代码: import numpy as npdata = np.eye(9)labels = np.array([0,1,2,2])def extract_one_class(X,labels,y):""" Take an array of data X,a column vector
我试图通过从
python生成器中取样来构造一个np.array,每次调用next时会生成一行数组.以下是一些示例代码:
import numpy as np data = np.eye(9) labels = np.array([0,1,2,2]) def extract_one_class(X,labels,y): """ Take an array of data X,a column vector array of labels,and one particular label y. Return an array of all instances in X that have label y """ return X[np.nonzero(labels[:] == y)[0],:] def generate_points(data,size): """ Generate and return 'size' pairs of points drawn from different classes """ label_alphabet = np.unique(labels) assert(label_alphabet.size > 1) for useless in xrange(size): shuffle(label_alphabet) first_class = extract_one_class(data,label_alphabet[0]) second_class = extract_one_class(data,label_alphabet[1]) pair = np.hstack((first_class[randint(0,first_class.shape[0]),:],second_class[randint(0,second_class.shape[0]),:])) yield pair points = np.fromiter(generate_points(data,5),dtype = np.dtype('f8',(2*data.shape[1],1))) extract_one_class函数返回数据子集:属于一个类标签的所有数据点.我想要得到一个带有shape =(size,data.shape [1])的np.array.目前,上面的代码段会返回错误: ValueError: setting an array element with a sequence. fromiter的文档声称返回一维数组.还有一些人曾经使用过fromiter来构建numpy中的记录数组(例如http://iam.al/post/21116450281/numpy-is-my-homeboy). 假设我能以这种方式生成数组,那么我是不是很明显?或者我的numpy不太正确? 解决方法
您可以修改generate_points以生成单个浮点数而不是np.arrays,使用np.fromiter形成一维数组,然后使用.reshape(size,-1)使其成为二维数组.
points = np.fromiter( generate_points(data,5)).reshape(size,-1) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |