我绝对是使用 python 的初学者。
我的问题如下......
示例:
在不由列数和行数定义的表格的基础上,您需要计算如图所示的表达式...
A B C D E .. n
a 1 3 5 3 5 .. n
b 4 3 4 2 6 .. n
. . . . . . .. n
.
m . . . . . .. n
X1 X2 X3 X4 X5.. Xn
X1 = (Aa / SUM A)^2 + (Ab / SUM A)^2+ .. +(Am / SUM A)^2
X2 = (Ba / SUM B)^2 + (Bb / SUM B)^2+ .. +(Bm / SUM B)^2
.
.
Xn ....
有人知道如何创建一个表达式来解决如图所示的问题吗?
我应该向现有代码插入定义的表达式....
values = [] # store the sum values here.
fields = arcpy.ListFields(fc, "*")
# get the OID/FID field name to skip
desc = arcpy.Describe(fc)
if desc.hasOID:
OIDname = desc.OIDFieldName.upper()
else:
OIDname = ""
for field in fields:
if field.name.upper() != OIDname: # skip the OID/FID field.
if field.type in ("Double", "Integer", "Single"):
# sum each suitable field, but not the NULL ones - they would be bad
with arcpy.da.SearchCursor(fc,field.name,field.name + " is not NULL") as sCur:
thisValue = 0
for row in sCur:
thisValue = ???????? # expression -- (A1 / SUM A)^2+...
values.append(thisValue) # this will be the inserted row
fieldNameList.append(field.name)
with arcpy.da.InsertCursor(fc, fieldNameList) as cur:
cur.insertRow(values)
在代码中我使用 arcpy 和 numpy ...
提前致谢
最佳答案
使用 NumPy 的广播规则,您可以避免循环执行以下操作:
s = a.sum(axis=0)
x = ((a/s)**2).sum(axis=0)
其中 a
是您的 m X n 矩阵。
关于python - 如何计算矩阵中每个单元格占列总和的比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28993806/