Сравнение двух методов для получения одного и того же массива

#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. Что вы подразумеваете под потоком? Вы можете просто выполнить итерацию по массиву…