我有30个值的数组,并希望将这些值附加到一个空数组中。
我创建了一个空的numpy数组,并使用np.append()
尝试将我的值添加到该空数组中。
oldArray = np.empty(30)
diameter = np.sqrt(values)
newArray = np.append(oldArray, [diameter])
我希望这样做可以更新旧数组并提供正确的输出。但是,当我打印出newArray时,它只是给了我存储在oldArray中的值。有关如何实际执行此操作的任何建议?
答案 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])