下面的代码片段创建了一个“典型的测试数组”,这个数组的目的是测试我的程序中的各种东西。有没有办法甚至有可能改变数组中元素的类型?
import numpy as np
import random
from random import uniform, randrange, choice
# ... bunch of silly code ...
def gen_test_array( ua, low_inc, med_inc, num_of_vectors ):
#typical_array = [ zone_id, ua, inc, veh, pop, hh, with_se, is_cbd, re, se=0, oe]
typical_array = np.zeros( shape = ( num_of_vectors, 11 ) )
for i in range( 0, num_of_vectors ):
typical_array[i] = [i, int( ua ), uniform( low_inc / 2, med_inc * 2 ), uniform( 0, 6 ),
randrange( 100, 5000 ), randrange( 100, 500 ),
choice( [True, False] ), choice( [True, False] ),
randrange( 100, 5000 ), randrange( 100, 5000 ),
randrange( 100, 5000 ) ]
return typical_array
引用the NumPy reference:第1章第一行
所以数组的每个成员都必须是同一类型的。与常规Python列表相比,这里的通用性丧失是允许对数组进行高速操作的权衡:循环可以在不测试每个成员类型的情况下运行。
在numpy中这样做的方法是使用structured array。
然而,在许多使用异构数据的情况下,一个简单的python列表是一个更好的选择。(或者,尽管在编写这个答案时它并不广泛可用,但是
pandas.DataFrame
对于这个场景来说绝对是理想的。)无论如何,上面给出的示例将作为一个“普通”numpy数组完美地工作。在你给出的例子中,你可以把所有的东西都变成浮子。(除了两列浮点数外,所有内容都是int。。。bools可以很容易地表示为int。)
尽管如此,为了说明如何使用结构化数据类型。。。
它产生一个包含11个字段的100元素数组:
相关问题 更多 >
编程相关推荐