2011年11月21日 星期一 15:39
手中有几组数据:
例如
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9])
b=np.array([a,b,c,d,e,f,g,h,i])
c=np.array([9,8,7,6,5,4,3,2,1])
datatype=np.dtype({
'names':['num','char','len'],
'formats':['i','s32','i']
})
先将a,b,c的shape更改为(-1,1)及列向量
然后我想通过
d=np.array([a,b,c],dtype=datatype)
生产如下数据
d=[[1,a,9],[2,b,8]...]
结果却是
[[[(1, '',0)]
[(2, '',0)]
[(3, '',0)]
[(4, '',0)]
[(5, '',0)]
[(6, '',0)]
[(7, '',0)]
[(8, '',0)]
[(9, '',0)]]...]
是将a,b,c分别应用了datatype。
不知道我的思路在哪里出了问题,请大家指点?
2011年11月21日 星期一 19:19
这样也可以
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9])
b=np.array(['a','b','c','d','e','f','g','h','i'])
c=np.array([9,8,7,6,5,4,3,2,1])
d = np.vstack((a,b,c))
print d
print d.T
2011年11月21日 星期一 22:49
谢谢你,我的本意是将数据格式化为dtype 所预定于的格式。
因为用np.loadtxt()读入的数据访问感觉非常的方便。
想用这个结构来实现一个简易的数据源。
不过都没有成功,不过现在这个写法也是满足需求的。
谢谢你。
我再尝试下,看能不能实现。
2011年11月22日 星期二 08:54
把shape改为-1,1是不行的,你可以用zip(a,b,c)创建这样的列表,然后用np.array将其转换为结构数组:
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9])
b=np.array(["a","b","c","d","e","f","g","h","i"])
c=np.array([9,8,7,6,5,4,3,2,1])
datatype=np.dtype({
'names':['num','char','len'],
'formats':['i','S32','i']
})
d=np.array(zip(a,b,c),dtype=datatype)
2011年11月22日 星期二 09:05
或者你可以自己编写一个这样的函数,例如structed_array:
import numpy as np
def structed_array(arrays, names):
minlen = min((len(a) for a in arrays))
struct_type = np.dtype({
'names': names,
'formats': [a.dtype for a in arrays]
})
result = np.zeros(minlen, dtype=struct_type)
for name, array in zip(names, arrays):
result[name] = array
return result
a=np.array([1,2,3,4,5,6,7,8,9])
b=np.array(["a","b","c","d","e","f","g","h","i"])
c=np.array([9,8,7,6,5,4,3,2,1])
d = structed_array((a,b,c), ("a","b","c"))
2011年11月22日 星期二 10:04
谢谢若愚哥哥,
居然没有想到,用零来占位,然后用数据替换的办法来实现。
最后有一点疑惑,
在构建struct_type 时,
struct_type = np.dtype({
'names': names,
'formats': [a.dtype for a in arrays]
})
这个’names‘的类型是不是因该用list?
d = structed_array((a,b,c), ("a","b","c"))
d = structed_array((a,b,c), ["a","b","c"])
不过两种写法都没有问题。
原因还没有找到。
2011年11月22日 星期二 11:09
另外savetxt好像是有一个功能将names作为第一行存储在文件了的,
不过忘记是怎么写了,我的numpy是1.3.0的,也没有找到其他的参数,
不知道哪位知道该如何操作?
2011年11月22日 星期二 11:43
我在numpy 1.6中也没有看到savetxt的这个参数,不过你可以自己写:
with file("output.txt", "wb") as f:
f.write(",".join(data.dtype.names) + "\n")
np.savetxt(f, data, delimiter=",")
我查了一下文档,NumPy2.0有这个功能了:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html
Zeuux © 2024
京ICP备05028076号