我该怎么做?我只需要一个形式为
的numpy数组/字典[ z (an int), [lamda (np float array)], [flux (np float array)] ]
所以我可以创建数据25'下面的numpy数组...但是当我尝试添加具有相同格式的另一条记录时,我收到错误:
data25 = [0.0,sData1['lambda'],sData1['flux']]
print data25
for z in np.arange(0.2,1.0,0.2):
newLambdaArr = []
newFluxArr = []
for entry in sData1:
newLambdaArr = np.append(newLambdaArr, [entry[0] * (1.0 + z)])
newFluxArr = np.append(newFluxArr, [entry[1]/(fpi * frw.dl(z) * (1+z))])
print 'new lambda',newLambdaArr
print 'new flux', newFluxArr
temp = [z, newLambdaArr, newFluxArr]
print 'just built: ', temp
data25 = np.append(data25, [temp] )
print data25
我在" data25 = np.append ..."行:
ValueError:使用序列设置数组元素。
第一个"打印数据25"给了我想要的东西:
[0.0, array([ 9.10000000e+01, 9.40000000e+01, 9.60000000e+01, ...,
1.20000000e+06, 1.40000000e+06, 1.60000000e+06], dtype=float32), array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
3.60900003e-08, 1.95199998e-08, 1.14600001e-08], dtype=float32)]
THX
答案 0 :(得分:1)
numpy.append
的工作方式不同,它会返回一个列表,其中包含您作为参数的列表中的元素,因此它不是您想要的:
>>> np.append([1, 2, 3], [4, 5, 6])
array([1, 2, 3, 4, 5, 6])
您的用例可以使用这样的简单Python列表来完成:
>>> z = 5
>>> flux = np.array([1, 2, 3])
>>> lambdas = np.array([4, 5, 6])
>>> data = [z, flux, lambdas]
>>> data
[5, array([1, 2, 3]), array([4, 5, 6])]
# Alternatively you can do data.append(z), data.append(flux) and then data.append(lambdas)
如果你希望结果是一个numpy数组,你必须像多维数组一样塑造它:
>>> data = np.array([np.array([z]), flux, lambdas]) # Notice the z integer is passed as an array
>>> data
array([array([5]), array([1, 2, 3]), array([4, 5, 6])], dtype=object)
如果你不像那样塑造它,你会得到错误:
>>> data = np.array([z, flux, lambdas])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.