Переопределяющие элементы в массиве Numpy - PullRequest
1 голос
/ 07 апреля 2019

У меня есть массив из 30 значений, и я хочу добавить эти значения в пустой массив.

Я создал пустой массив numpy и использовал np.append(), чтобы попытаться добавить свои значения в этот пустой массив.

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

Я надеялся, что при этом он обновит старый массив и выдаст правильный вывод.Однако, когда я распечатываю newArray, он просто дает мне значения, хранящиеся в oldArray.Любые предложения о том, как на самом деле выполнить эту операцию?

Ответы [ 3 ]

0 голосов
/ 07 апреля 2019

Я не смог бы смоделировать вашу проблему, если бы использовал значения как целые числа или массив, он всегда присоединяет массив диаметра к концу, как и должно быть.Однако, учитывая, что вы новичок и используете пустой массив, я думаю, что вы, возможно, пытаетесь записать значения в этот массив.

Это:

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,)
0 голосов
/ 07 апреля 2019
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])
0 голосов
/ 07 апреля 2019

для простоты я использовал 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.]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...