簡體   English   中英

覆蓋 Numpy 數組中的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM