Как объясняется здесь здесь , ключевое различие заключается в том, что flatten
является методом объекта ndarray и, следовательно, может быть вызван только для истинных массивов numpy. Напротив, ravel()
является функцией уровня библиотеки и, следовательно, может быть вызвана на любой объект, который может быть успешно проанализирован. Например, ravel()
будет работать над списком ndarrays, в то время как flatten недоступен для этого типа объекта.
@IanH также указывает на важные различия с обработкой памяти в его ответе.
Вы забыли поставить r = r + 1
после
komz = komz - kom
vntT(r, 1) = dz
vntT(r, 2) = komz ' Debt
vntT(r, 3) = dw
vntT(r, 4) = kom ' payment
vntT(r, 5) = " .. komz > kom"
, поэтому он перезаписывает этот бит в следующем цикле.
РЕДАКТИРОВАТЬ: Надеюсь, теперь я понимаю это, и это то, что вам нужно: я думаю, это правильно, что вы перезаписали свой ряд, но это нужно только перезаписать последние три столбца. Поэтому я думаю, что в этом конкретном случае вам нужно проверить, есть ли уже значение в массиве в этой позиции, чтобы вы не перезаписывали его:
If komz > kom Then
If cstr(vntT(r,1)) = "" then 'because of this if-statement, it will not overwrite previous values
vntT(r, 1) = dz
vntT(r, 2) = komz 'debt
end if
vntT(r, 3) = dw
vntT(r, 4) = kom 'payment
vntT(r, 5) = " komz>kom"
r = r + 1
РЕДАКТИРОВАТЬ (снова): я играл с вашими данными и, возможно, это то, что вам нужно?:
If komz > kom Then
If CStr(vntT(r, 1)) = "" Then 'because of this if-statement, it will not overwrite previous values
vntT(r, 1) = dz
vntT(r, 2) = komz 'debt
End If
vntT(r, 3) = dw
vntT(r, 4) = kom 'payment
vntT(r, 5) = " komz>kom"
r = r + 1
vntT(r, 1) = dz
vntT(r, 2) = komz - kom
vntS(i + 1, 2) = komz - kom
ElseIf komz < kom Then
Я не уверен, что это правильный способ обработки платежей, но он ближе всего подходит к вашему первоначальному образцу, где все работало хорошо .