在循环中定义矩阵的第i个,第j个条目

时间:2017-12-17 21:30:19

标签: python numpy for-loop matrix

假设我想定义一个n x m矩阵,其第i,第j个条目是i + j。如何指定我想要的i,j条目是什么?在'for'循环中,它不允许我说,例如,A [i,j] = i + j。我该怎么做?

5 个答案:

答案 0 :(得分:0)

因为你已经标记了这个numpy,因为numpy是在python中处理大型数组和数学的正确方法:

>>> import numpy as np
>>> i = 3; j = 4
>>> np.arange(i)[:,None] + np.arange(j)[None,:]
array([[0, 1, 2, 3],
       [1, 2, 3, 4],
       [2, 3, 4, 5]])

更改现有阵列

让我们创建一个数组:

>>> arr = np.zeros((3,4))
>>> arr
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

现在,让我们更改一个条目:

>>> arr[1,2] = 1+2
>>> arr
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  3.,  0.],
       [ 0.,  0.,  0.,  0.]])

答案 1 :(得分:0)

您可以使用 np.fromfunction 来定义array [i, j] == i + j

>>> np.fromfunction(lambda i, j: i+j, (5, 5))
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 1.,  2.,  3.,  4.,  5.],
       [ 2.,  3.,  4.,  5.,  6.],
       [ 3.,  4.,  5.,  6.,  7.],
       [ 4.,  5.,  6.,  7.,  8.]])

要更改位置[i, j]的元素,您只需index并更改其值:

>>> a = np.fromfunction(lambda i, j: i+j, (5, 5))
>>> a[1, 2] = 99
>>> a
array([[  0.,   1.,   2.,   3.,   4.],
       [  1.,   2.,  99.,   4.,   5.],
       [  2.,   3.,   4.,   5.,   6.],
       [  3.,   4.,   5.,   6.,   7.],
       [  4.,   5.,   6.,   7.,   8.]])

答案 2 :(得分:0)

如果您的矩阵已经创建,因此某个项目已存在于行i和列j中,您可以使用

修改该项目
A[i][j] = newvalue

这适用于Python内置的各种“矩阵”,例如列表或数组。请注意,这意味着矩阵中的每一行都是整个列表中的一个项目,因此“矩阵”实际上是一个列表列表。

其他模块中添加的其他类型(例如numpy)也允许使用其他方法。

答案 3 :(得分:0)

简单的单行:

arr = [[0, 0, 0, 0], 
       [0, 0, 0, 0],      
       [0, 0, 0, 0]] 

arr = [[i+j for j in range(4)] for i in range(3)]

输出:

arr => [
[0, 1, 2, 3], 
[1, 2, 3, 4], 
[2, 3, 4, 5]]

这会更改原始数组。

答案 4 :(得分:0)

numpy中你原则上可以创建一个空数组:

import numpy as np

m, n = 3, 5
A = np.empty(shape=(m, n), dtype=int)

然后使用循环填充它:

for i in range(m):
    for j in range(n):
        A[i, j] = i+j

然而,这不是推荐的方式。最好避免循环并利用矢量化:创建网格

i, j = np.ogrid[:m, :n]

并在一次操作中创建数组

A = i+j

在简单添加索引的特殊情况下,您可以做得更短:

A = np.add.outer(range(m), range(n))