如何计算1d和nd数组之间的距离公式?

时间:2018-12-14 05:43:41

标签: python arrays numpy numpy-ndarray

我正在尝试减去一维数组:

probe = [1, 2, 3, 4, 5, 6] 

nd数组中的每个元素:

k = np.array([["words words ", 1,1,3,4,6,7], ["blah blah", 2,8,7,5,3,2], [" please help me", 3,4, 5, 6, 7,1], [" What are you doing, man", 1,3,5,10,9,11]])

我已经删除了第k个数组的第0个索引,并将这些值存储在new_k中,以便现在可以在要比较的两个数组中的值之间进行比较。

new_k = k
new_k = np.delete(new_k, 0, axis=1)

我正在尝试在nd数组中找到最接近输入的值。我需要帮助。

到目前为止,我设法到达了这里,但我迷路了。:

for i in range(len(new_k)):
    for j in range(len(new_k[0][1])):
        temp[j] = (new_k[1][j] - probe[j])
        new_k[i][1] = temp

print(new_k)
new_k2 = new_k*new_k

上面的代码抛出此错误:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

还:我知道如何通过将单个值与值数组进行比较来获得“最接近的值”,但是我想通过将数组与数组进行比较

4 个答案:

答案 0 :(得分:0)

np.asarray(k[:,1:], dtype=int) - probe

答案 1 :(得分:0)

问题在于numpy与普通列表不同,它一次仅包含唯一的类型元素。如果类型超过1,则所有类型都将转换为U32的{​​{1}}。当您从列表中删除第一个元素时,其余元素仍然是字符串类型,而不是int类型。您应该已经将它们转换为string。因此,该错误引发:

int

尝试时:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

答案 2 :(得分:0)

  Snackbar snackbar = Snackbar.make( coordinator_,
            service_name+" Service Added To Cart!", 1000);

    //setting the snackbar action button text size
    View view = snackbar.getView();
    TextView txt_action = (TextView) view.findViewById(android.support.design.R.id.snackbar_action);
    TextView txt_text = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);
    txt_action.setTextSize(13);
    txt_action.setAllCaps(false);
    txt_text.setTextSize(13);
    snackbar.setActionTextColor(ContextCompat.getColor(getActivity(), R.color.snackbar));

    snackbar.setAction("View Cart", new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //your code
        }
    });
    snackbar.show();

In [263]: probe = [1, 2, 3, 4, 5, 6] 具有一个容纳字符串的k

dtype

但是通过分割第一列,其余的可以转换为整数数组:

In [264]: k = np.array([["words words ", 1,1,3,4,6,7], ["blah blah", 2,8,7,5,3,2
     ...: ], [" please help me", 3,4, 5, 6, 7,1], [" What are you doing, man", 1
     ...: ,3,5,10,9,11]])
In [265]: k
Out[265]: 
array([['words words ', '1', '1', '3', '4', '6', '7'],
       ['blah blah', '2', '8', '7', '5', '3', '2'],
       [' please help me', '3', '4', '5', '6', '7', '1'],
       [' What are you doing, man', '1', '3', '5', '10', '9', '11']],
      dtype='<U24')

那是一个(4,6)数组。 In [266]: k[:, 1:].astype(int) Out[266]: array([[ 1, 1, 3, 4, 6, 7], [ 2, 8, 7, 5, 3, 2], [ 3, 4, 5, 6, 7, 1], [ 1, 3, 5, 10, 9, 11]]) 为(6,);广播让我们减去:

np.array(probe)

答案 3 :(得分:0)

numpy数组并不意味着具有多种数据类型。 k实际上是一个字符串数组,因此数组k中没有要减去的数字数据类型。

如果您想保留字符串的第一列,则应查看pandas数据框。您可以将字符串保留为数据框的索引,但仍可以作为数字数据数组对其进行操作。使用数据,您可以执行以下操作:

df = pd.DataFrame(k[:, 1:].astype(int), index=k[:, 0])
df - probe