问题描述
首先,我将介绍我在做什么,然后我要实现的目标。
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数组中获得相同的顺序,而只是删除特定的索引对。
我可以这样做,并遍历我的数组:
mat3D[:,0]
mat3D[:,1]
mat3D[:,2]
mat3D[:,1,0]
...
但是有什么方法可以一次选择索引数组
在此先感谢您的帮助,希望我的问题很清楚。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)