微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从3D矩阵中删除元素并转换为列表列表2D数组

如何解决从3D矩阵中删除元素并转换为列表列表2D数组

首先,我将介绍我在做什么,然后我要实现的目标。

import numpy as np
from scipy.spatial.distance import cdist

def diff_len(string1,string2):
    return abs(len(string1) - len(string2))

def diff_len_2(string1,string2):
    return abs(len(string1) - len(string2))*2

def diff_len_minus(string1,string2):
    return abs(len(string1) - len(string2))-3

first = np.array(["hello","hello","hellllo"])
second = np.array(["hlo","halo","alle"])

d1 = cdist(first[:,np.newaxis],second[:,lambda a,b: diff_len(a[0],b[0]))
d2 = cdist(first[:,b: diff_len_2(a[0],b[0]))
d3 = cdist(first[:,b: diff_len_minus(a[0],b[0]))

mat3D = np.stack((d1,d2,d3))

mat3D.reshape(mat3D.shape[0],-1).T


# distance 1

[[2. 1. 1.]
 [2. 1. 1.]
 [4. 3. 3.]]


# distance 2   

[[4. 2. 2.]
 [4. 2. 2.]
 [8. 6. 6.]]


# distance 3

[[-1. -2. -2.]
 [-1. -2. -2.]
 [ 1.  0.  0.]]

上面,我们在不同的矩阵中获得了每对字符串的所有功能

因此,例如,每个矩阵中索引[0,0]处的元素对应于特定对的每个特征。在我的示例中,它是索引为[0,0]的一对(“ hello”,“ hlo”),其特征是[2,4,-1]。

我将所有矩阵堆叠在一起,从而得到3D矩阵,每个维度对应一个要素,每个索引(行,列)对应于特定的对。

然后我为每对字符串都有一个特征向量。

最后,我重塑3D阵列的形状以得到具有所有对所有特征的2D阵列,每对对应一行。

[[ 2.  4. -1.]
 [ 1.  2. -2.]
 [ 1.  2. -2.]
 [ 2.  4. -1.]
 [ 1.  2. -2.]
 [ 1.  2. -2.]
 [ 4.  8.  1.]
 [ 3.  6.  0.]
 [ 3.  6.  0.]]

这是我的问题 我有一个包含所有对索引的数组:

np.array([[0 0],[0,1],2],[1,0],[2,2]])

但是我有3D数组的特定索引,我不想放入我的最终2D数组中。例如,我不需要索引(1,1)和(0,1),因此我将其删除

np.array([[0 0],2]])

现在,我如何实现完成的相同操作(获取2d数组),但不计算删除的索引,而在2D数组中获得相同的顺序,而只是删除特定的索引对。

Select like this for an array of indexes

我可以这样做,并遍历我的数组:

mat3D[:,0]
mat3D[:,1]
mat3D[:,2]
mat3D[:,1,0]
...

但是有什么方法可以一次选择索引数组

在此先感谢您的帮助,希望我的问题很清楚。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。