覆盖Numpy数组中的元素

时间:2019-04-07 03:04:58

标签: python numpy

我有30个值的数组,并希望将这些值附加到一个空数组中。

我创建了一个空的numpy数组,并使用np.append()尝试将我的值添加到该空数组中。

oldArray = np.empty(30)
diameter = np.sqrt(values)
newArray = np.append(oldArray, [diameter])

我希望这样做可以更新旧数组并提供正确的输出。但是,当我打印出newArray时,它只是给了我存储在oldArray中的值。有关如何实际执行此操作的任何建议?

3 个答案:

答案 0 :(得分:0)

为简单起见,我使用np.zeros而不是np.empty,因为它为数组分配了随机值,我也为数组分配了一个值。

import numpy as np

values = np.ones(30)
oldArray = np.zeros(30)
diameter = np.sqrt(values)
newArray = np.append(oldArray, [diameter])

print('oldArray= ', oldArray)
print(30*'-')
print('newArray= ', newArray)

输出:

oldArray=  [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0.]
------------------------------
newArray=  [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

答案 1 :(得分:0)

如果我将值用作整数或数组,则无法模拟您的问题,它总是将直径数组附加到末尾。但是,考虑到您是新手,并且正在使用一个空数组,我认为您可能正在尝试将值写入此数组中。

这是:

values = 1
oldArray = np.empty(3)
oldArray[:] = np.sqrt(values)

这将使oldArray充满所需的值,请注意,它不是旧的数组,而是现在的新数组:

[1. 1. 1.]

在这种情况下,也许您还想添加单个组件

values = [1, 2]
oldArray = np.empty(3)
oldArray[0: len(values)] = np.sqrt(values)

将仅给出两个已更改的值

[1. 1.41421 0.]


下面是我尝试模拟您的问题的方法。

oldArray = np.empty(3)
print(f"oldArray:{oldArray}, shape:{oldArray.shape}")
values = np.ones(5)
diameter = np.sqrt(values)
newArray = np.append(oldArray, diameter)
print(f"newArray:{newArray}, shape:{newArray.shape}")

应该输出的内容:

oldArray:[2.59338625e+161 6.91119945e+212 5.98157061e-154], shape:(3,)
newArray:[2.59338625e+161 6.91119945e+212 5.98157061e-154 1.00000000e+000
1.00000000e+000 1.00000000e+000 1.00000000e+000 1.00000000e+000], shape:(8,)

答案 2 :(得分:0)

In [23]: values = np.arange(4)                                                  

如果我生成一组新值,则可以将其分配给变量:

In [24]: arr = np.sqrt(values)                                                  
In [25]: arr                                                                    
Out[25]: array([0.        , 1.        , 1.41421356, 1.73205081])

我可以为数组分配新值,但是为什么呢?

In [26]: arr[:] = [100,200,300,400]                                             
In [27]: arr                                                                    
Out[27]: array([100., 200., 300., 400.])

concatenate让我加入了几个数组-实际上是它们的整个列表:

In [28]: np.concatenate([arr,arr])                                              
Out[28]: array([100., 200., 300., 400., 100., 200., 300., 400.])

无需模仿名称为np.append的列表追加。如果必须使用迭代(具有仅适用于标量的函数),则最好使用列表追加:

In [29]: alist = []                                                             
In [30]: for v in values: 
    ...:     alist.append(v**.5) 
    ...: alist                                                                  
Out[30]: [0.0, 1.0, 1.4142135623730951, 1.7320508075688772]
In [31]: np.array(alist)                                                        
Out[31]: array([0.        , 1.        , 1.41421356, 1.73205081])
In [32]: np.array([v**.5 for v in values])                                      
Out[32]: array([0.        , 1.        , 1.41421356, 1.73205081])