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