Как разместить столбцы в массиве в цикле? - PullRequest
1 голос
/ 29 марта 2019

У меня есть функция, генерирующая 2d массив. Я запускаю функцию в цикле for для генерации данных. После завершения цикла я хочу объединить каждый из этих двухмерных массивов (с горизонтальной укладкой), чтобы можно было экспортировать его в файл CSV.

Я понял, что функция column_stack полезна для укладки массивов так, как я хочу. Допустим, что «results» - это двумерный массив, возвращаемый моей функцией. Если у меня есть исходный массив, я могу сложить его так, как я хочу. У меня нет исходного массива на данный момент.
Однако есть ли способ, которым я могу сгенерировать массив в цикле for и добавить другие 2d-массивы из следующих итераций

np.column_stack((results,results))


array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])

Вот что я пытаюсь сделать:

from xtralien import *
from numpy import *


### 1.Sweep Settings ###
vstart = 0  #Starting Voltage (V)
vend = 1    #End Voltage (V)
vstep = 0.1 #Step Size (V)
smu = 'SMU1'

### 2.Create Variables ###
vnum = ((vend-vstart)/vstep) + 1 #Calculate number of steps in sweep
volts = linspace(vstart,vend,vnum) #Create voltage list

### 3. Perform Sweep ###
with X100.USB('COM5') as Dev1: #Connect to the Device via USB
    for i in [1,2,3,4,5]: ################This list is just an example. in the program it might be of any length!!
        Dev1['SMU2'].oneshot(i)
        results = vstack([Dev1[smu].oneshot(v) for v in volts]) 

Я хочу, чтобы все результаты были объединены в один. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Если вы хотите построить массив, который можно использовать в качестве начального значения, в котором column_vstack другие массивы, вы можете построить его из списка пустых списков.

Демонстрация:

res = np.array([[]] * 11)      # or better: res = np.zeros(

arr = np.array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])

np.column_stack((res, arr))

дает:

array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])
0 голосов
/ 29 марта 2019

Я бы предложил использовать pandas и просто добавить данные в фрейм данных в цикле for, а затем объединить послесловие данных.Ну как то так.

import pandas as pd

AJ=[]

for i in [1,2,3,4,5]:
    Dev1['SMU2'].oneshot(i)
    results = vstack([Dev1[smu].oneshot(v) for v in volts])
    AJ.append(results) 

AJ=pd.concat(AJ)

Обратите внимание, что после цикла for AJ будет просто кадром данных, который можно комбинировать различными способами.Для получения дополнительной информации этот сайт полезен https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...