- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想用公式中的数据填充 24 x 4 数组。基于 4 个初始值,如 [0, 0, 2137, 1419]
,数组应根据下面的输出表用数字填充。
在 Excel 中,如果不时使用,这很容易。但是,当经常使用并且 a、b、c 或 d 中的值发生变化时,让 Python 创建各种数组会最有帮助。
问题:如何在 Python 中实现这一点?
我认为嵌套的for i in jloops
可能可以完成这项工作,但老实说我在这里迷失了。非常感谢您的帮助。
初始数据:
a+
和 a-
使用 7 行
b+
和 b-
使用 5 行
a = 0 b = 0 c = 2137 d = 1419
公式:上半部分具有升序值,下半部分具有降序值。当 x+=1、x=x、x-=1 和 x=x 的流程在列之间移动时,存在非常合乎逻辑的顺序。重要说明:每个公式均引用其上方行中的前一个值。
a = 0 b = 0 c = 2137 d = 1419
a+=1 b=b c+=1 d=d 0
a+=1 b=b c+=1 d=d 1
a+=1 b=b c+=1 d=d 2
a+=1 b=b c+=1 d=d 3
a+=1 b=b c+=1 d=d 4
a+=1 b=b c+=1 d=d 5
a+=1 b=b c+=1 d=d 6 (7 for rows is known)
a=a b+=1 c=c d+=d 0
a=a b+=1 c=c d+=d 1
a=a b+=1 c=c d+=d 2
a=a b+=1 c=c d+=d 3
a=a b+=1 c=c d+=d 4 (5 for rows is known)
a-=a b=b c-=c d=d 0
a-=a b=b c-=c d=d 1
a-=a b=b c-=c d=d 2
a-=a b=b c-=c d=d 3
a-=a b=b c-=c d=d 4
a-=a b=b c-=c d=d 5
a-=a b=b c-=c d=d 6 (7 for rows is known)
a=a b-=b c=c d-=d 0
a=a b-=b c=c d-=d 1
a=a b-=b c=c d-=d 2
a=a b-=b c=c d-=d 3
a=a b-=b c=c d-=d 4 (5 for rows is known)
Rows
0 1 2 3 Columns
输出:
array = ([0,0,2137,1419],
[1,0,2138,1419],
[2,0,2139,1419],
[3,0,2140,1419],
[4,0,2141,1419],
[5,0,2142,1419],
[6,0,2143,1419],
[7,0,2144,1419],
[7,1,2144,1420],
[7,2,2144,1421],
[7,3,2144,1422],
[7,4,2144,1423],
[7,5,2144,1424],
[6,5,2143,1424],
[5,5,2142,1424],
[4,5,2141,1424],
[3,5,2140,1424],
[2,5,2139,1424],
[1,5,2138,1424],
[0,5,2137,1424],
[0,4,2137,1423],
[0,3,2137,1422],
[0,2,2137,1421],
[0,1,2137,1420],
[0,0,2137,1419])
最佳答案
你还没有回复我的评论。但是看看所需的输出和公式:之后的文本,我认为您实际上是想加/减 1,而不是变量本身。
因此,您基本上是在前 7 行中重复添加向量 [1,0,1,0]
,然后添加 [0,1,0,1]
code> 在接下来的五个中,然后再次减去相同的东西。
这是很好的线性,因此您可以将它们全部累加起来,并将结果始终应用于第一行。这对于 numpy 来说非常棒!
import numpy as np
import itertools as it
# first 7 rows add 1 to a and 1 to c
add1 = np.array([1, 0, 1, 0])
# next 5 rows add 1 to b and 1 to d
add2 = np.array([0, 1, 0, 1])
# stack them accordingly
upper = np.vstack(list(it.chain(it.repeat(add1, 7),
it.repeat(add2, 5))))
# lower is the negated version of upper
lower = -upper
# stack them
both = np.vstack((upper,
lower))
# with cumsum we'll get for each row the relative distance to the first row
# (istead of distance to previous)
sums = np.cumsum(both, axis=0)
# prepend 0 vector to retain the the first row
sums = np.vstack((np.zeros_like(add1), sums))
# create the frist row
l = np.array([0, 0, 2137, 1419])
# now just add up row and sums
result = l+sums
print(result)
这将非常快,对于大型数组也是如此。但是,如果您没有 numpy 或不想安装它,则可以使用一些 zip
和 map
技巧来实现等效方法。
import itertools as it
def addVecs(a, b):
return [e1 + e2 for e1, e2 in zip(a, b)]
def scaleVec(a, s):
return [e*s for e in a]
# first 7 rows add 1 to a and 1 to c
add1 = [1, 0, 1, 0]
# next 5 rows add 1 to b and 1 to d
add2 = [0, 1, 0, 1]
# stack them accordingly
upper = list(it.chain(it.repeat(add1, 7),
it.repeat(add2, 5)))
# lower is the negated version of upper
lower = list(it.starmap(scaleVec, zip(upper, it.repeat(-1))))
# stack them
both = upper + lower
# create cumsum to get for each row the relative distance to the first row
# (istead of distance to previous)
sums = [[0, 0, 0, 0]]
for row in both:
sums.append(addVecs(sums[-1], row))
# the first row
l = [0, 0, 2137, 1419]
# now for each row in sums, add it to l
result2 = list(it.starmap(addVecs, zip(it.repeat(l), sums)))
for row in result2:
print(row)
两个结果都包含您想要的输出:
[[ 0 0 2137 1419]
[ 1 0 2138 1419]
[ 2 0 2139 1419]
[ 3 0 2140 1419]
[ 4 0 2141 1419]
[ 5 0 2142 1419]
[ 6 0 2143 1419]
[ 7 0 2144 1419]
[ 7 1 2144 1420]
[ 7 2 2144 1421]
[ 7 3 2144 1422]
[ 7 4 2144 1423]
[ 7 5 2144 1424]
[ 6 5 2143 1424]
[ 5 5 2142 1424]
[ 4 5 2141 1424]
[ 3 5 2140 1424]
[ 2 5 2139 1424]
[ 1 5 2138 1424]
[ 0 5 2137 1424]
[ 0 4 2137 1423]
[ 0 3 2137 1422]
[ 0 2 2137 1421]
[ 0 1 2137 1420]
[ 0 0 2137 1419]]
我在我的笔记本电脑上测试了这两种方法的性能。已经建立了 sums
后,numpy
需要 6.29 µs,普通 Python 需要 29.5 µs。
关于Python数组: formulas to populate array with data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643532/
我正在尝试使用神经网络进行预测。 创建一些X: x f y ~ x1 + x2 ## fit model using `f` model model Call: neuralnet(formula
我要字段idEmpresa使用 idDepartamento 成为@Formula 字段(这是另一个@Formula 字段)在 WHERE陈述。 @Entity public class CfgUsu
我正在使用Google Apps脚本从概念数据库中查询数据,并在我的Google日历中创建日历事件。。我遇到了一些奇怪的行为,我搞不懂。。我的概念数据库为每个事件都有一个条目。每个事件都有开始和结束日
例如:将公式左侧的7个单元格相加。。值得注意的是,当在其左侧或范围内的某个位置插入新列时,该公式应该起作用。不扩展范围,不跳过新插入的列。
例如:将公式左侧的7个单元格相加。。值得注意的是,当在其左侧或范围内的某个位置插入新列时,该公式应该起作用。不扩展范围,不跳过新插入的列。
例如:将公式左侧的7个单元格相加。。值得注意的是,当在其左侧或范围内的某个位置插入新列时,该公式应该起作用。不扩展范围,不跳过新插入的列。
示例:对公式左侧的7个单元格求和。。值得注意的是,当在其左侧或范围内的某个位置插入新列时,该公式应该起作用。不扩展范围,不跳过新插入的列。
我需要帮助才能在 MS Excel 工作表中执行以下功能。工作表示例如下 A B C D E 1
好的, 我有一个射弹,其位置定义如下: a.x = initialX + initialDX * time; a.y = initialY + initialDY * time + 0.5 * gra
我正在尝试根据另一个点的经度计算一个点的经度。它们具有相同的纬度,并且它们之间的距离是已知的。我尝试使用余弦的特殊定律公式。 # 'lat' short for 'latitude', 'lng' s
我使用haversine公式来计算点之间的距离。这个公式的结果是米还是公里? http://en.wikipedia.org/wiki/Haversine_formula 任何人都可以帮助我吗?
取消使用鱼眼镜头或广角镜头制作的照片的最简单方法是什么?我正在寻找一个参数很少的像素投影公式。相机和镜头参数将不可知,因此用户必须直观地更改参数。谢谢 最佳答案 有好纸here这为镜头畸变提供了一些看
当使用来自 Formula package 的 Formula() 或 as.Formula() 时,我收到一条警告消息。它似乎不会影响功能,但我无法理解它的来源。 我正在使用 Formula 包更新
我正在使用这个公式来显示本月剩余的天数。是否可以在工作日内执行此操作? =EOMONTH(TODAY(),0)-TODAY() 最佳答案 分析工具包还提供函数 NETWORKDAYS 来查找两个日期之
我正在向字段添加公式: @Formula(value = "(select count(*) from approvalGroup as a where a.isAccounting=true)")
我想根据标准在下面的 C 列中使用 IF 公式发表评论: A B C 10 56% Leader 20 10% Laggard 55 45% Mover 90 90% Cashco
有没有更优雅(更简单)的方式将变量放入.formula?我不想使用 .formulaR1C1 我有这个代码: Range("C8").Select Selection.End(xlDown).Sele
我在 excel 中解析字符串,我需要通过最后一个数字返回所有内容。例如: Input: A00XX Output: A00 在我的情况下,我知道最后一个数字将在索引 3 和 5 之间,所以我用暴力强
我有一个包含两张纸的 LibreOffice Calc 文件。表 2 只有一列 A 有很多数字。在工作表 1 中,每行的 A 列也包含一个数字。我想从工作表 1 中删除所有在 A 列中具有值的行,这些
Excel的范围下拉(或拖拽)操作的公式是什么? 输入2,5,7,9然后向下拖动,显示11.5 13.8 16.1 18.4 ....步骤2.3 输入5,10,20然后向下拖动,显示26.66667
我是一名优秀的程序员,十分优秀!