python - 使用 Numpy 在空数组中插入行
问题描述
您好,我目前正在尝试转换此数组
test=np.array([[0,0],[0,1],[1,1],[3,0]])
并使用曼哈顿距离将这个数组转换成这个形状
[0., 1., 2., 3.]
[1., 0., 1., 4.]
[2., 1., 0., 3.,
[3., 4., 3., 0.]
代码是这样的
list_x=[]
newarray=np.array([])
length=len(test)
for i in range(length):
for j in range(length):
print('i=',i)
print('j=',j)
var=sum(abs(a-b) for a,b in zip(test[i],test[j]))
list_x.append(var)
newarray= np.append(newarray,list_x,axis = 0)
list_x=[]
但代码的结果不断给我这个:
array([0., 1., 2., 3., 1., 0., 1., 4., 2., 1., 0., 3., 3., 4., 3., 0.])
我的 np.append() 中是否存在阻止将其转换为 4*4 形状数组的问题?
解决方案
您可以使用 scikit-learnmanhattan_distances
获取所有成对的曼哈顿距离,将上述内容简化为单个函数调用:
from sklearn.metrics.pairwise import manhattan_distances
manhattan_distances(test)
array([[0., 1., 2., 3.],
[1., 0., 1., 4.],
[2., 1., 0., 3.],
[3., 4., 3., 0.]])
如果您想使用 for 循环获取距离,我建议您改用 python 列表。为了最终得到一个嵌套列表,生成一个内部列表,其中包含一行与其他行的距离,并在每次迭代时将其附加到外部列表:
out=[]
for i in range(length):
new_row = []
for j in range(length):
var=sum(abs(a-b) for a,b in zip(test[i],test[j]))
new_row.append(var)
out.append(new_row)
print(out)
# [[0, 1, 2, 3], [1, 0, 1, 4], [2, 1, 0, 3], [3, 4, 3, 0]]
推荐阅读
- wordpress - 如何在我的 wordpress 页面上显示更大的图像?
- c# - .net 核心上的 Winforms:ConfigurationManager
- c# - 为什么三元运算符不能代替 if-else
- matlab - 如何制作从 a 点开始并在 b 点结束的斜坡函数。[a,b]。并且在区间外的值为 0
- mongodb - 将数据从 MongoDB 迁移到 DynamoDB(Localhost)
- swift - 当键盘仅出现在小型设备上时如何移动视图
- git - 当我在不提交代码的情况下连接到不同的分支时,IDE 中的代码会发生什么?
- javascript - 设置 Gatsby 博客分层 URL slug 结构
- angular - 在自定义数据源中循环以突出显示行的范围
- git - 如何以 monorepo 模式布局文件?最佳做法是什么?