Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中更改矩阵的所有列值?_Python_Arrays_Python 3.x_Slice - Fatal编程技术网

如何在Python中更改矩阵的所有列值?

如何在Python中更改矩阵的所有列值?,python,arrays,python-3.x,slice,Python,Arrays,Python 3.x,Slice,正如标题所说,我想将所有列的值更改为相同的数组,除了numpy之外,不使用外部库,也不使用for、while或类似的东西,因为我想要的是效率 我想我可以用切片来解决这个问题,因为你可以对行这样做 初始矩阵 a=[[0,0,0], [0,0,0], [0,0,0]] #想要用数组替换所有列 b=[1,2,3] #置换后的基质 a=[[1,1,1], [2,2,2], [3,3,3]] 这是我想要的输出,但由于某种原因,我还不能实现,因为我想用一种简单的方式来实现。我怎么做?提前感谢。创建新矩阵比

正如标题所说,我想将所有列的值更改为相同的数组,除了numpy之外,不使用外部库,也不使用for、while或类似的东西,因为我想要的是效率

我想我可以用切片来解决这个问题,因为你可以对行这样做

初始矩阵 a=[[0,0,0], [0,0,0], [0,0,0]] #想要用数组替换所有列 b=[1,2,3] #置换后的基质 a=[[1,1,1], [2,2,2], [3,3,3]]
这是我想要的输出,但由于某种原因,我还不能实现,因为我想用一种简单的方式来实现。我怎么做?提前感谢。

创建新矩阵比“就地”替换列更简单。 我假设你的矩阵是正方形的

length = len(b)
a = [ [b[i]] * length for i in range(length) ]
结果

   [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
现在,根据相关评论者的多次请求,我为矩形a添加了一个解决方案:

length = len(b)
width = len(a[0])
a = [ [b[i]] * width for i in range(length) ]
或者,以更具蟒蛇风格的方式

width = len(a[0])
a = [ [x] * width for x in b ]   

使用列表理解的简单解决方案:

a=[[x]*len(行)代表行,x代表邮政编码(a,b)]
这将创建一个新的矩阵,而不是在适当的位置对矩阵进行变异。如果要就地对其进行变异,则需要一个嵌套循环:

对于行,邮政编码中的x(a,b):
对于范围内的i(列(行)):
行[i]=x
输出:

[[1, 1, 1], [2, 2, 2], [3, 3, 3]]

您的a列表无效,因此我假设您是指a到3个列表的列表

a=[
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
]
b=[1,2,3]
对于计数器,枚举(b)中的值:
a[计数器]=[计数器中i的值]
印刷品(a)
enumerate免费为您提供计数器


注意,如果b中的元素多于a,这将抛出索引超出范围错误,因此如果您不确定,请在替换之前检查长度。

最好能为这个问题提供更多的上下文,因为目前没有什么可供参考的内容。例如,您对数组
a
b
有多大的控制权?这个操作一开始可能根本就没有必要

现在,这里有一个解决方案,当阵列与您的示例中的阵列相似时,它可以工作

将numpy导入为np
arr_1=np.数组([1,2,3])
arr_1_col=arr_1.重塑(-1,1))
arr_2=np.tile(A=arr_1列,reps=3)

注意:您在问题中提到了NumPy,我对此的推荐力度不够。一旦您完成了这些任务,切换到numpy阵列将非常有益。

这并不能解决问题。你测试过了吗?更好,但你假设矩阵总是平方的。这个问题不能保证这一点。你也应该解释你的答案;不要只是张贴代码,这是完全错误的。对于
a=[[0]、[0]、[0]]
b=[1,2,3]
,它将失败。
b的长度
告诉你
a的高度
而不是
a的
宽度
。在这种情况下,你永远无法从
b
猜出
宽度case@kaya3是的,我假设是平方矩阵。在这个例子中,为什么topic starter会提供一个正方形的呢?不管怎样,你把我的解决方案的一般化放在你的answer@Poojan,以这种方式,它可能会失败,而不是使用列表理解来创建列表。您只需使用
[value]*length
语法即可。此解决方案有效,但有点奇怪。它就地更新矩阵
a
,但通过创建新行而不是就地更新行来实现。如果其他代码持有对其中一行的引用,这可能会导致一些非常微妙的错误,而这一行(因为它没有被就地更新)将仍然充满零。我认为你要么更新所有的东西,要么创建一个新的矩阵而不改变旧的矩阵;混合使用这两种方法可能没有那么有用。这个解决方案很有效,但有点奇怪。它就地更新矩阵
a
,但通过创建新行而不是就地更新行来实现。如果其他代码持有对其中一行的引用,这可能会导致一些非常微妙的错误,而这一行(因为它没有被就地更新)将仍然充满零。我认为你要么更新所有的东西,要么创建一个新的矩阵而不改变旧的矩阵;将两者混合使用可能没有那么有用。我不明白为什么这会成为一个问题。你能详细说明一下吗?假设我们用零定义
a
,然后我们定义
a_别名=a
a_行别名=a[0]
。更新
a
时,要么更新应“到位”,即
a\u别名
a\u行别名
的内容也会发生变化,因为它们只是更新数据的别名,要么更新应“不到位”,在这种情况下,
a_别名
a_行_别名
仍然引用中带零的旧矩阵。当代码运行时,
a_别名
中现在有
b
中的值,但是
a_行别名
仍然有零;这将是令人惊讶的,并且可能是bug的来源。
[[1, 1, 1], [2, 2, 2], [3, 3, 3]]