【问题标题】:Append numpy array with diff dimensions附加不同维度的numpy数组
【发布时间】:2015-01-29 00:41:14
【问题描述】:

我该怎么做?我只需要一个 numpy 形式的数组/字典

[ z (an int), [lamda (np float array)], [flux (np float array)] ]

所以我可以在下面创建 'data25' 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: 使用序列设置数组元素。

第一个“print data25”给了我我想要的:

[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)]

谢谢

【问题讨论】:

  • 不要使用np.append。使用alist.append(newvalue)。如果您想要 numpy 数组(而不是 Python 列表),请显式创建它们。

标签: python arrays numpy


【解决方案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.

【讨论】:

  • 谢谢...那:data = np.array([np.array([z]), flux, lambdas]) 完美运行。
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2020-03-18
  • 2013-12-24
  • 2018-05-11
  • 2020-07-06
相关资源
最近更新 更多