предположим, что у нас есть пустой массив
[1 -2 -5 -7 -6 5 8] # keep mind the number of elements are close to million here
каждый элемент будет преобразован в двоичный массив, а длина этого массива будет равна ->
length of (binary maximum integer value) + 1 # in our case it is 8 ('1000')
# len('1000') + 1 which is 5
# len + 1 is to give a space to add the value for positive or negative flag i.e. 0 or 5
это будеткак ..
[[0, 0, 0, 0, 1], # 1
[5, 0, 0, 1, 0], # -2
..]
так, чтобы найти наибольшее числовое значение, которое я делаю
max_num = len(np.binary_repr(max(np.abs(music))) + 1 # music is the array
, это даст мне значение 32767
.
проблема в том, что32767
не самое высокое значение в массиве, это 32768
, и метод не обнаруживает его.почему?
и преобразовать числа в двоичный массив ->
for _ in music:
print(np.abs(_), _, i, len(music))
mate = list('{0:b}'.format(np.abs(_)).zfill(max_num))
dat = list(map(int, mate))
if _ < 0:
fl = 5
else:
fl = 0
muse.append(dat)
muse[i][0] = fl
i = i + 1
РЕДАКТИРОВАТЬ 1
Итак, я снова копаю вэта проблема снова.и я изменил все на простоту, я заменил одно выражение лайнера простым циклом for
.
Дело в том, что np.abs()
не превращает -32768
в положительное, это действительно неприятное поведение здесьскриншоты.
ЗДЕСЬ Вы можете видеть, четыре члена, первый - np.abs(number)
массива, второй - простое число, третий - индексчетвертого - это общее количество элементов в массиве.
РЕДАКТИРОВАТЬ 2
хорошо, так что еще одна странная вещь.
так, как яупоминалось ранее, что теперь я использую простой цикл for
для нахождения максимального числа, но np.abs()
не идентифицировал его.
я теперь использовал * - 1
для преобразования его в положительное число, и оно работаетсейчас .. проверь это.
так что же это такое?