附加具有不同尺寸的numpy数组

时间:2014-12-01 03:03:55

标签: python arrays numpy

我该怎么做?我只需要一个形式为

的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

1 个答案:

答案 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.