[英]Overriding elements in a Numpy array
我有一個包含 30 個值的數組,我希望將這些值附加到一個空數組中。
我創建了一個空的 numpy 數組並使用np.append()
嘗試將我的值添加到這個空數組中。
oldArray = np.empty(30)
diameter = np.sqrt(values)
newArray = np.append(oldArray, [diameter])
我希望通過這樣做它會更新舊數組並提供正確的輸出。 但是,當我打印出newArray
它只是給了我存儲在oldArray
的值。 關於如何實際執行此操作的任何建議?
為簡單起見,我使用 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.]
如果我將值用作整數或數組,我將無法模擬您的問題,它總是按照應有的方式將直徑數組附加到末尾。 但是,考慮到您是新手並且您使用的是空數組,我認為您可能會嘗試將值寫入該數組。
這是:
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,)
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
來模仿 list 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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.