#python-3.x #numpy
Вопрос:
np.random.seed(123456) X = np.random.normal(0,1,1000) Y = np.random.normal(0,1,1000) Z = np.random.normal(0.5, 1.7,1000) W = np.random.normal(0,1,1000) stream_A = np.concatenate((X,Y,Z,W))
Затем я запускаю приведенный ниже код: в основном мне нужно создать итератор для передачи одного образца за раз в другую функцию.
# 4 chunks of 1000 samples, so X,Y,W and Z arrays n = 4 iter_array = iter(stream_A) # Size 4000 result = [[] for _ in range(n)] for _ in itertools.repeat(None, 1000): for i in range(n): result[i].append(next(iter_array))
Проблема в том, что:
results[0]
представляет собой список со всеми элементами потока X, определенными выше.
Если сравнить results[0] == X
, я получу false
Если я преобразую список в np.массив:
y=np.array([np.array(xi) for xi in result], dtype=object)
и затем:
y[0] == X
Я также получаю false
Кто-нибудь может мне помочь, почему я становлюсь Фальшивым?
И они почему-то не совпадают, потому что результаты, которые я получаю, когда обращаюсь X
к функции, не совпадают с их результатами, когда я обращаюсь y[0]
к одной и той же функции.
Комментарии:
1. Тест на равенство для списков отличается от теста для массивов.
Ответ №1:
Просто сложите их в стопку:
stream_A = np.stack((X,Y,Z,W)) stream_A.shape # (4, 1000) np.all(stream_A[0] == X) # True
Комментарии:
1. Спасибо за вашу помощь ! Проблема в том, что я не могу использовать поток с saphe(4,1000) в итераторе. Мне действительно нужно понять, почему они разные.
2. Что вы подразумеваете под потоком? Вы можете просто выполнить итерацию по массиву…