首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的二维数组

Python中的二维数组
EN

Stack Overflow用户
提问于 2011-11-14 04:18:24
回答 4查看 336关注 0票数 1

我有一个包含int值的向量,如下所示:

代码语言:javascript
运行
复制
v=[10,8,6]

我想要的是创建一个m*m矩阵,存储这些元素之间的距离,即取向量的每个元素,然后从所有其他元素中减去它,所以最后我将得到:

代码语言:javascript
运行
复制
 m[3][3]=10-10   10-8   10-6
         8-10    8-8    8-6
         6-10    6-8    6-6

我想在Python中实现它,但不使用NumPy。到目前为止,我已经这样做了:

代码语言:javascript
运行
复制
def main():
    v=[10,8,6]
    l=len(v)
    m=[]
    #filling the matrix
    for i in range(0,l-1):
        for j in range(0,l-1):
            m[i][j]=abs(v[i]-v[j])

    #visualize the matrix
    for i in range(0,l-1):
        for j in range(0,l-1):
            print m[i][j]

但是我得到了一些错误,不能识别m的界限。为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-14 04:23:49

代码语言:javascript
运行
复制
v= [10,8,6] 
m = [[abs(y-x) for y in v] for x in v]

编辑:

要获得漂亮的打印效果,您可以使用如下内容:

代码语言:javascript
运行
复制
for i in m:
 print '%s '*len(i) % tuple(i)
票数 4
EN

Stack Overflow用户

发布于 2011-11-14 04:47:17

您需要为信封列表中的每一行创建一个列表。我使用了一个双重列表来理解m,然后使格式更美观一些,以便打印出矩阵。另外,注意你的索引:记住,范围是从第一个索引到第一个索引减去传递给它的第二个索引。您还可以对m中的每一行执行print ' '.join(row),以便将其很好地打印出来。

代码语言:javascript
运行
复制
def main():
    v=[10,8,6]
    l=len(v)
    #filling the matrix
    m=[[abs(x - y) for y in v] for x in v]

    #visualize the matrix
    for i in range(0,l):
        for j in range(0,l):
            print m[i][j],
        print
main()

结果:

代码语言:javascript
运行
复制
0 2 4
2 0 2
4 2 0
票数 1
EN

Stack Overflow用户

发布于 2011-11-14 05:00:39

你的列表一开始就是空的。您不能对列表中的元素进行索引。解决这个问题的一种方法是创建列表,然后追加它们。

代码语言:javascript
运行
复制
m=[]
#filling the matrix
for i in range(0,l-1):
    x = []
    for j in range(0,l-1):
        x.append( abs(v[i]-v[j]) )
    m.append(x)

或者,您可以创建矩阵,然后填充它

代码语言:javascript
运行
复制
m=[[0] *l for x in range(l)]
#filling the matrix
for i in range(0,l-1):
    for j in range(0,l-1):
        m[i][j]=abs(v[i]-v[j])

更好的是其他人所展示的列表理解

代码语言:javascript
运行
复制
m = [[abs(y-x) for y in v] for x in v]

但是,我会使用numpy/scipy

代码语言:javascript
运行
复制
m = scipy.spatial.distance.pdist(v)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8114425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档