Привет, я пытаюсь воспроизвести матрицы, произведенные Matlab с помощью Python. Это 2D -матрица (n, 2) форма без значений NAN. Они все плавают. Эти значения генерируются с помощью определенных параметров. Прежде чем применять уникальные, матрицы идентичны (np.llclose возвращает true, и NAN нет). < /P>
Однако после применения уникального: < /p>
MATLAB matrix has shape (240, 2)
Python matrix has shape (232, 2)
< /code>
Другой пример: < /p>
Comparison before unique() operations
Same shapes, (164, 2)
Same Values (allclose)? True
Comparison after unique() operations
Shapes mismatch. Python version: (160, 2) MATLAB:(148, 2)
< /code>
При сравнении результатов в строке в строке я обнаружил, что многие строки отличаются, даже если они выглядят визуально схожими. Сравнение наборов строк показывает, что оба матрица содержат 188 строк, которые не находятся в другом -вероятно, из -за различий точностью с плавающей точкой (например, -9,9 против -9,8999999999999). < /P>
Матрицы слишком велики, поэтому я действительно не могу прикрепить их здесь (вроде сложно, чтобы создавать другие примеры с меньшими примерами с меньшими r.def compare_as_sets(p, m):
p_set = set(map(tuple, p))
m_set = set(map(tuple, m))
only_in_p = p_set - m_set
only_in_m = m_set - p_set
print(f"Rows only in Python: {len(only_in_p)}")
print(f"Rows only in MATLAB: {len(only_in_m)}")
if only_in_p:
print("\nRows only in Python:")
for row in sorted(only_in_p):
print(f" {row}")
if only_in_m:
print("\nRows only in MATLAB:")
for row in sorted(only_in_m):
print(f" {row}")
# import the matlab before unique()
m_unique = pd.read_csv("avail_user_data.csv", header=None).to_numpy()
m_non = pd.read_csv("avail_not_unique_user.csv", header=None).to_numpy()
# import python version
p_unique = pd.read_csv("python_unique.csv", header=None).to_numpy()
p_unique = np.round(p_unique, 6)
p_non = pd.read_csv("python_nonunique.csv", header=None).to_numpy()
< /code>
Некоторые выходы этой функции дают мне это: < /p>
Rows only in Python: 188
Rows only in MATLAB: 188
Rows only in Python:
(np.float64(-11.5), np.float64(-9.899999999999999))
(np.float64(-11.5), np.float64(-7.699999999999998))
(np.float64(-11.5), np.float64(-4.3999999999999995))
(np.float64(-11.5), np.float64(-3.299999999999999))
(np.float64(-11.5), np.float64(-2.1999999999999993))
(np.float64(-11.5), np.float64(-1.0999999999999979))
.
.
.
Rows only in MATLAB:
(np.float64(-11.5), np.float64(-9.9))
(np.float64(-11.5), np.float64(-7.7))
(np.float64(-11.5), np.float64(-4.4))
(np.float64(-11.5), np.float64(-3.3))
(np.float64(-11.5), np.float64(-2.2))
(np.float64(-11.5), np.float64(-1.1))
< /code>
Я на самом деле понятия не имею, что происходит. Некоторые случаи как до, так и после того же. Но некоторые своеобразные случаи они дают мне неправильные матрицы после уникального ().
Подробнее здесь: https://stackoverflow.com/questions/797 ... ting-point
Несоответствие между Matlab Unique и Numpy NP.Unique Результаты по матрице с плавающей точкой [закрыто] ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение