python 怎么给矩阵里的每一个元素赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 怎么给矩阵里的每一个元素赋值相关的知识,希望对你有一定的参考价值。

想让矩阵的每一个元素都有70%的几率为1, 但是输出后会变成这种情况
space?5

percent?50

0 0 0 1 0

0 0 0 1 0

0 0 0 1 0

0 0 0 1 0

0 0 0 1 0
请问源代码该怎么修改才好
import random
n = input("space?")
percent = input("percent?")
earth = [[0]*n]*n
def showBoard():
for i in range(n):
for j in range(n):
print earth[i][j] ,
print
def treeSet():
for i in range(n):
for j in range(n):
per = random.uniform(0,1) * 100
if per >= 70:
earth[i][j] = 1
else:
earth[i][j] = 0
treeSet()
showBoard()

方法一:

1、如图所示是我们创建了一个矩阵,一般我们的操作过程中有矩阵的话那么在工作区就会出现,如图所示,我们可以双击工作区的需要更改的矩阵。

2、然后在弹出的表格中选中需要更改的单个矩阵元素,进行更改即可。

方法二:

1、我们也可以通过语句来实现对矩阵单个元素的赋值操作。我们可以通过下面的语句:

a(1,2)=100

如图所示就可以看到我们矩阵的该位置元素数值已经更改了。

2、假如我们输入的行数和列数大于原来的矩阵会出现什么现象呢?我们可以试试,我们输入a(5,6)=100,来看看结果。

3、我们可以看到矩阵会自动扩展成5行6列的一个新的矩阵,其余为赋值的区域会自动为0,我们也可以通过这个方法来对矩阵进行扩展。

参考技术A

我也研究了很久,终于发现问题了.

函数没错.

错在定义 earth 的时候.

earth = [[0]*n]*n  # does not work
earth = [[0,0,0],[0,0,0],[0,0,0]]  # work

 

如果想 python 当中应用矩阵运算.

你就需要了解 numpy 这个库.

你可以百度一下 "numpy 莫烦", 莫烦教程有一系列的 numpy 教学教程.

本回答被提问者和网友采纳
参考技术B 答非所问,问的是Python 给的确实MATLAB,还推送到百度第一条,每次都误导人!

python怎么操作多维数组元素

参考技术A 在Python中,一个像这样的多维表格可以通过“序列的序列”实现。一个表格是行的序列。每一行又是独立单元格的序列。这类似于我们使用的数学记号,在数学里我们用Ai,j,而在Python里我们使用A[i][j],代表矩阵的第i行第j列。

这看起来非常像“元组的列表”(Lists of Tuples)。

“列表的列表”示例:

我们可以使用嵌套的列表推导式(list comprehension)创建一个表格。 下面的例子创建了一个“序列的序列”构成的表格,并为表格的每一个单元格赋值。

table= [ [ 0 for i in range(6) ] for j in range(6) ]
print table
for d1 in range(6):
for d2 in range(6):
table[d1][d2]= d1+d2+2
print table
123456

程序的输出结果如下:

[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],

[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]],

[[2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9],

[5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12]]

1234

这个程序做了两件事:创建了一个6 × 6的全0表格。 然后使用两枚骰子的可能组合的数值填充表格。 这并非完成此功能最有效的方式,但我们通过这个简单的例子来演示几项技术。我们仔细看一下程序的前后两部分。

程序的第一部分创建并输出了一个包含6个元素的列表,我们称之为“表格”;表格中的每一个元素都是一个包含6个0元素的列表。它使用列表推导式,对于范围从0到6的每一个j都创建对象。每一个对象都是一个0元素列表,由i变量从0到6遍历产生。初始化完成之后,打印输出二维全0表格。

推导式可以从里向外阅读,就像一个普通表达式一样。内层列表[ 0 for i in range(6) ]创建了一个包含6个0的简单列表。外层列表[ [...] for j in range(6) ]创建了这些内层列表的6个深拷贝。

程序的第2个部分对2个骰子的每一个组合进行迭代,填充表格的每一个单元格。这由两层嵌套循环实现,每一个循环迭代一个骰子。外层循环枚举第一个骰子的所有可能值d1。内层循环枚举第二个骰子d2。

更新每一个单元格时需要通过table[d1]选择每一行;这是一个包含6个值的列表。这个列表中选定的单元格通过...[d2]进行选择。我们将掷骰子的值赋给这个单元格,d1+d2+2。

其他示例:

打印出的列表的列表不太容易阅读。下面的循环会以一种更加可读的形式显示表格。

for row in table:

print row

[2, 3, 4, 5, 6, 7]

[3, 4, 5, 6, 7, 8]

[4, 5, 6, 7, 8, 9]

[5, 6, 7, 8, 9, 10]

[6, 7, 8, 9, 10, 11]

[7, 8, 9, 10, 11, 12]

12345678910111213

作为练习,读者可以试着在打印列表内容时,再打印出行和列的表头。提示一下,使用"%2d" % value字符串运算符可以打印出固定长度的数字格式。

显示索引值(Explicit Index Values)。

我们接下来对骰子表格进行汇总统计,得出累计频率表。我们使用一个包含13个元素的列表(下标从0到12)表示每一个骰子值的出现频率。观察可知骰子值2在矩阵中只出现了一次,因此我们期望fq[2]的值为1。遍历矩阵中的每一个单元格,得出累计频率表。

fq= 13 * [0]
for i in range(6):
for j in range(6):
c= table[i][j]
fq[ c ] += 1
12345

使用下标i选出表格中的行,用下标j从行中选出一列,得到单元格c。然后用fq统计频率。

这看起来非常的数学和规范。
Python提供了另外一种更简单一些的方式。

使用列表迭代器而非下标,表格是列表的列表,可以采用无下标的for循环遍历列表元素。

fq= 13 * [0]
print fq
for row in table:
for c in row:
fq[c] += 1
print fq[2:

以上是关于python 怎么给矩阵里的每一个元素赋值的主要内容,如果未能解决你的问题,请参考以下文章

matlab怎样给第一个矩阵1号位置赋值,第二个矩阵2号位置赋值?

python怎么操作多维数组元素

opencv怎么给mat赋值

在python中,怎么给矩阵删除一个元素?

matlab中如何给一个矩阵中的某几个特定位置赋值

矩阵向量求导法则