生成固定一列的 Python 数组

Posted

技术标签:

【中文标题】生成固定一列的 Python 数组【英文标题】:Generate Python Array with one Column Fixed 【发布时间】:2021-07-31 06:09:30 【问题描述】:

我正在尝试在 Python 中生成一个 5 列数组,其中每行中的第一个数字保持固定为 0.2,但每行中接下来的 4 个数字会有所不同,并且每行数字的总和为 1。所以类似于

[.2, .2, .2, .2, .2]
[.2, .3, .1, .2, .2]
[.2, .2,  0, .6,  0]
[.2, .5,  0, .1, .2]

这可能吗?

【问题讨论】:

【参考方案1】:

如果您使用的是 NumPy,您可以使用 the normalization technique here 将 4 行的总和为 0.8,然后在开头添加一列 0.2。

import numpy as np

n = 0.2
a = np.random.rand(4, 4)

# Sum rows and divide by target
s = a.sum(1) / (1-n)

# Normalize rows
normalized = a / s.reshape(-1, 1)
print(normalized.sum(1))  # -> [0.8 0.8 0.8 0.8]

# Add column of .2
first_col = np.repeat(n, a.shape[0])
final = np.concatenate((first_col.reshape(-1, 1), normalized), axis=1)
print(final.sum(1))  # -> [1. 1. 1. 1.]

示例值:

>>> print(a)
[[0.86134437 0.56626254 0.21527553 0.16657095]
 [0.01680889 0.4971182  0.61437178 0.77192482]
 [0.98655061 0.26207574 0.62670237 0.67427712]
 [0.83763804 0.41413746 0.16745744 0.02619564]]
>>> print(s)
[2.26181674 2.3752796  3.1870073  1.80678573]
>>> print(normalized)
[[0.3808197  0.25035739 0.09517815 0.07364476]
 [0.00707659 0.20928829 0.2586524  0.32498272]
 [0.30955392 0.08223255 0.1966429  0.21157062]
 [0.46360674 0.22921227 0.09268251 0.01449848]]
>>> print(final)
[[0.2        0.3808197  0.25035739 0.09517815 0.07364476]
 [0.2        0.00707659 0.20928829 0.2586524  0.32498272]
 [0.2        0.30955392 0.08223255 0.1966429  0.21157062]
 [0.2        0.46360674 0.22921227 0.09268251 0.01449848]]

【讨论】:

附言。我还在学习 NumPy,所以任何指针表示赞赏【参考方案2】:

一个简单的答案是这样的:

array = [0.2]
rest = [ran.random() for i in range(4)]
s = sum(rest)
rest = [ i/s * 0.8 for i in rest ]
array.extend(rest)

【讨论】:

第二行导致错误提示列表分配索引超出范围

以上是关于生成固定一列的 Python 数组的主要内容,如果未能解决你的问题,请参考以下文章

可固定列的可滚动表,固定列大小相等

移动端固定头部和固定左边第一列的实现方案(Vue中实现demo)

具有固定标题和固定列的 HTML 表格? [关闭]

如何将垂直滚动条添加到始终固定第一列的表中

python怎么实现修改文本中某行某列的数值为固定值

1.excel如何让一列的数都乘以固定值