IndexError: 배열에 대한 인덱스가 너무 많습니다.
많은 스레드가 있다는 것은 알지만, 모두 3x3 매트릭스와 같은 매우 단순한 케이스에 대한 것입니다.솔루션은 제 상황에도 적용되지 않습니다.그래서 나는 G 대 l1 (11이 아니라 L1)을 그래프화하려고 한다.데이터는 엑셀 파일에서 로드한 파일에 있습니다.Excel 파일은 14x250이므로 14개의 인수가 있으며 각각 250개의 데이터 포인트가 있습니다.다른 유저(Hugh Bothwell!)에게 코드의 에러에 대해 도움을 받았습니다만, 또 다른 에러가 발생했습니다.
문제의 코드는 다음과 같습니다.
# format for CSV file:
header = ['l1', 'l2', 'l3', 'l4', 'l5', 'EI',
'S', 'P_right', 'P1_0', 'P3_0',
'w_left', 'w_right', 'G_left', 'G_right']
def loadfile(filename, skip=None, *args):
skip = set(skip or [])
with open(filename, *args) as f:
cr = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
return np.array(row for i,row in enumerate(cr) if i not in skip)
#plot data
outputs_l1 = [loadfile('C:\\Users\\Chris\\Desktop\\Work\\Python Stuff\\BPCROOM - Shingles analysis\\ERR analysis\\l_1 analysis//BS(1) ERR analysis - l_1 - P_3 = {}.csv'.format(p)) for p in p3_arr]
col = {name:i for i,name in enumerate(header)}
fig = plt.figure()
for data,color in zip(outputs_l1, colors):
xs = data[:, col["l1" ]]
gl = data[:, col["G_left" ]] * 1000.0 # column 12
gr = data[:, col["G_right"]] * 1000.0 # column 13
plt.plot(xs, gl, color + "-", gr, color + "--")
for output, col in zip(outputs_l1, colors):
plt.plot(output[:,0], output[:,11]*1E3, col+'--')
plt.ticklabel_format(axis='both', style='plain', scilimits=(-1,1))
plt.xlabel('$l1 (m)$')
plt.ylabel('G $(J / m^2) * 10^{-3}$')
plt.xlim(xmin=.2)
plt.ylim(ymax=2, ymin=0)
plt.subplots_adjust(top=0.8, bottom=0.15, right=0.7)
전체 프로그램을 실행한 후 다음 오류 메시지가 나타납니다.
Traceback (most recent call last):
File "C:/Users/Chris/Desktop/Work/Python Stuff/New Stuff from Brenday 8 26 2014/CD_ssa_plot(2).py", line 115, in <module>
xs = data[:, col["l1" ]]
IndexError: too many indices for array
이 문제에 부딪히기 전에 위의 에러 메시지가 나타내는 다음 행에 관련된 다른 행이 있었습니다.
Traceback (most recent call last): File "FILE", line 119, in <module>
gl = data[:, col["G_left" ]] * 1000.0 # column 12
IndexError: index 12 is out of bounds for axis 1 with size 12
첫 번째 오류는 이해하지만 수정에 어려움을 겪고 있습니다.두 번째 오류는 혼란스럽습니다.제 상사가 절 정말 괴롭히니까 어떤 도움이라도 주시면 감사하겠습니다!
이 문제는 에러 메시지에 나타나 있는 것 같습니다만, 발견하는 것은 쉽지 않습니다.
IndexError: too many indices for array
xs = data[:, col["l1" ]]
'Too many indexs'는 너무 많은 인덱스 값을 제공했음을 의미합니다.데이터가 2D 배열이 될 것으로 예상하기 때문에 두 가지 값을 지정했습니다.Numpy가 불평하는 이유는data
2D가 아닙니다(1D 또는 없음).
이것은 조금 추측입니다.loadfile()에 전달된 파일 이름 중 하나가 빈 파일을 가리키거나 형식이 잘못된 파일을 가리키는지 궁금합니다.이 경우 1D 또는 빈 어레이가 반환될 수 있습니다.np.array(None)
던지지 않다Error
알 수 없는...)이 장애를 방지하려면 에러 체크인을 에 삽입할 수 있습니다.loadfile
기능.
님이 추천하는 것은for
루프 삽입:
print(data)
이것은 Python 2.x 또는 3.x에서 동작하며 문제의 원인을 나타낼 수 있습니다.그것은 단지 당신의 가치 중 하나라는 것을 알게 될 것이다.outputs_l1
문제의 원인이 되고 있는 파일(즉, 1개의 파일)을 리스트 합니다.
표시되는 메시지는 기본 Python 예외 메시지가 아닙니다.
새로운 python 목록의 경우 범위를 벗어난 인덱스에만 느려집니다(독서에서도 마찬가지).
>>> l = []
>>> l[1]
IndexError: list index out of range
목록으로 여러 항목을 전달하거나 다른 값을 전달하려고 하면TypeError
:
>>> l[1, 2]
TypeError: list indices must be integers, not tuple
>>> l[float('NaN')]
TypeError: list indices must be integers, not float
다만, 여기에서는, 어레이의 처리에 내부적으로 사용하는 것을 사용하고 있는 것 같습니다.의 코드 베이스를 자세히 조사하면, 다음과 같은 것을 알 수 있습니다.
static NPY_INLINE npy_intp
unpack_tuple(PyTupleObject *index, PyObject **result, npy_intp result_n)
{
npy_intp n, i;
n = PyTuple_GET_SIZE(index);
if (n > result_n) {
PyErr_SetString(PyExc_IndexError,
"too many indices for array");
return -1;
}
for (i = 0; i < n; i++) {
result[i] = PyTuple_GET_ITEM(index, i);
Py_INCREF(result[i]);
}
return n;
}
여기서, 언팩 방법은 지수의 크기가 결과의 크기보다 클 경우 오류를 발생시킵니다.
이 Python을 Python은 Python을 키운다.TypeError
인덱스에서 는 Numpy를 .IndexError
하다
데이터를 목록으로 변환하기 전에 데이터를 목록으로 변환했습니다.
data = list(data) data = np.array(data)
언급URL : https://stackoverflow.com/questions/28036812/indexerror-too-many-indices-for-array
'programing' 카테고리의 다른 글
Bash에서 테이블 열을 정렬하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
---|---|
Windows 콘솔에서 cURL 명령 실행 (0) | 2023.04.14 |
stdin은 단말기가 아니기 때문에 의사 단말기는 할당되지 않습니다. (0) | 2023.04.14 |
깜박임 - 줄임표 삽입 또는 페이드와 같이 오버플로우 시 텍스트를 줄 바꿈 (0) | 2023.04.14 |
iOS Universal Link가 앱 내에서 열리지 않습니다. (0) | 2023.04.14 |