나는 data from a spread sheet 집합을 가지고 있습니다. 값은 xy 평면에서 자석의 자기장입니다. 다른 z 높이에 해당하는 여러 개의 레이어가 있습니다. 내 목표는이 작업을보다 쉽게 수행 할 수 있도록 3 차원 배열을 만드는 것입니다.Numpy 다차원 배열은 1D 배열로만 등록합니다.
그러나 3D 배열을 구성 할 수 없습니다. 각 요소는 2 차원 행렬이지만 최종 결과는 1 차원 배열로만 등록됩니다 (아래 참조). 더 쉬운 숫자로 이것을 재현하려고 시도한 모든 시도는 동일한 효과를 보이지 않습니다 (3D 배열을 생성 할 수 있습니다).
정말 감사드립니다. 다음과 같이
내 코드는 다음과 같습니다
터미널에서import xlrd
import numpy as np
book = xlrd.open_workbook('./magnetic_mapping.xlsx')
sheet = book.sheet_by_index(0)
n = 0
layer = []
layers = []
layer_name = None
#import pudb; pudb.set_trace()
while True:
row = sheet.row_values(n)
# Look for the start of a new layer, reading a line with nothing
# will throw an IndexError, reading a line with a number will throw
# an AttributionError.
try:
if row[0].split()[0] == 'Layer':
# If we are already reading in data from a layer, save it before
# starting a new layer
if layer_name:
layers.append(np.array(layer))
layer_name = row[0]
print layer_name
layer = []
except (IndexError, AttributeError):
# If we are in a layer, and the line is not empty, read in the data
if layer_name and row[0]:
data = np.array(row[2:], dtype='S9')
data[data == ''] = np.nan # convert empty strings to nan
layer.append(data.astype(float))
# Break loop if at EOF, otherwise increment the spreadsheet row.
if row[0] == 'END':
break
else:
n+=1
# append the last layer recorded
layers.append(np.array(layer))
layers = np.array(layers)
:
In [1]: layers.shape
Out[1]: (7,)
In [2]: layers[0].shape
Out[2]: (27, 13)
dstack에 호의를 표합니다. – Ben