【问题标题】:Calculate distance between 1D array and nD array using python使用python计算一维数组和nD数组之间的距离
【发布时间】:2026-01-09 20:05:01
【问题描述】:

我是python的初学者,希望你能帮我解决我的问题。

我有两个文件 library.csv(9 列)和 case.csv(8 列),我使用 np.loadtxt 读取它们。我从库中选择列将它们放入数组 base[] 中,除了最后一列,我将 case.csv 放入数组问题 [] 中。我会计算问题数组中每一行与基本 [] 数组的所有行之间的马氏距离,并将最小距离存储在一个表中。

这是我的代码:

# Imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sn

from keras.models import load_model
from scipy.spatial import distance

# [1] Get the  library.csv and  cases.scv

library = np.loadtxt("library.csv", delimiter=",")
cases = np.loadtxt("cases.csv", delimiter=",")
problems = np.loadtxt("cases.csv", delimiter=",") #cases copie

# Select columns from library to use as base cases, except solutions
base = library[:, range(library.shape[1] - 1)] # Exclude last column (solution)

 # Move through all problem cases
for i in range(problems.shape[0]):
        
        # [3.1] Get inverse covariance matrix for the base cases

  covariance_matrix = np.cov(base)                                    # Covariance
  inverse_covariance_matrix = np.linalg.pinv(covariance_matrix)       # Inverse

        # [3.2] Get case row to evaluate
  case_row = problems[i, :]
  

        # Empty distances array to store mahalanobis distances obtained comparing each library cases
  distances = np.zeros(base.shape[0])

        # [3.3] For each base cases rows
  for j in range(base.shape[0]):
    # Get base case row
       base_row = base[j, :]

    # [3.4] Calculate mahalanobis distance between case row and base cases, and store it
       distances[j] = distance.mahalanobis(case_row, base_row, inverse_covariance_matrix)

# [3.5] Returns the index (row) of the minimum value in distances calculated
  min_distance_row = np.argmin(distances)

但我收到此错误:

使用 TensorFlow 后端。

回溯(最近一次通话最后一次):
文件“C:\Users\HP\Desktop\MyAlgo\mainAlgo.py”,第 45 行,在
距离[j] = distance.mahalanobis(case_row, base_row, inverse_covariance_matrix)
文件“C:\Users\HP\AppData\Local\Programs\Python\Python38\lib\site-packages\scipy\spatial\distance.py”,第 1083 行,马哈拉诺比斯
m = np.dot(np.dot(delta, VI), delta)
文件“array_function internals>”,第 5 行,点
ValueError:形状 (8,) 和 (384,384) 未对齐:8 (dim 0) != 384 (dim 0)

【问题讨论】:

    标签: python arrays csv distance mahalanobis


    【解决方案1】:

    您的问题似乎是 base_rowcase_row 的长度为 8 而 covariance_matrix 包含 384 个变量,这些数字应该相同。 因此无法进行矩阵乘法。

    我不了解您的数据和此处的统计属性,但我的猜测是您需要在计算协方差矩阵之前转置 base。在调用np.cov(base)base 中的一行应包含单个变量的所有观察值。 https://numpy.org/devdocs/reference/generated/numpy.cov.html

    【讨论】:

    • 谢谢base的转置解决问题:)
    最近更新 更多