def maxvalues():
for n in range(1,15):
dummy=[]
for k in range(len(MotionsAndMoorings)):
dummy.append(MotionsAndMoorings[k][n])
max(dummy)
L = [x + [max(dummy)]] ## to be corrected (adding columns with value max(dummy))
## suggest code to add new row to L and for next function call, it should save values here.
我有一个大小(k x n)的数组,我需要选择该数组中第一列的最大值。请建议除了我尝试之外还有更简单的方法吗?我的主要目的是将它附加到列中而不是行中。如果我只是追加,它会在最后添加值。我希望在L中的第0行的列中完成此操作,因为我将再次调用此函数并向L添加新行并执行相同操作。请建议。
答案 0 :(得分:3)
首先,在函数中访问全局变量并不是很方便。它有效,但它不被认为是好的风格。所以不要使用:
def maxvalues():
do_something_with(MotionsAndMoorings)
你应该用一个参数来做:
def maxvalues(array):
do_something_with(array)
MotionsAndMoorings = something
maxvalues(MotionsAndMoorings) # pass it to the function.
下一个奇怪的是你似乎排除了数组的第一行:
for n in range(1,15):
我认为这是无意识的。列表的第一个元素具有索引0
而不是1
。所以我想你想写一下:
for n in range(0,15):
对于任意长度,甚至更好:
for n in range(len(array[0])): # I chose the first row length here not the number of columns
但这不是很直观,因为max
函数已经实现了一些非常好的关键字(key
),所以你不需要迭代整个数组:
import operator
column = 2
max(array, key=operator.itemgetter(column))[column]
这将返回第i个元素最大的行(您只需将您想要的列定义为此元素)。但是最大值将返回整行,因此您只需要提取第i个元素。
因此,要获得您可以执行的每个列的所有最大值的列表:
[max(array, key=operator.itemgetter(column))[column] for column in range(len(array[0]))]
对于你的L
我不知道这是什么,但是你应该把它作为参数传递给函数:
def maxvalues(array, L): # another argument here
但由于我不知道x
和L
应该是什么,所以我不会再进一步了解。但看起来您希望将MotionsAndMoorings
的列设置为行,将行设置为列。如果是这样,你可以用:
dummy = [[MotionsAndMoorings[j][i] for j in range(len(MotionsAndMoorings))] for i in range(len(MotionsAndMoorings[0]))]
这是一个列表修改,可以转换列表,如:
[[1, 2, 3], [4, 5, 6], [0, 2, 10], [0, 2, 10]]
to"倒置"列/行列表:
[[1, 4, 0, 0], [2, 5, 2, 2], [3, 6, 10, 10]]
但是像roadrunner66已经说过,有时最简单的方法是使用像numpy
或pandas
这样的库,这些库已经具有非常先进和快速的功能,可以完全按照您的要求进行操作,并且非常容易使用
例如,您可以通过以下方式将python列表转换为numpy数组:
import numpy as np
Motions_numpy = np.array(MotionsAndMoorings)
使用以下方法获取最大列:
maximums_columns = np.max(Motions_numpy, axis=0)
您甚至不需要将其转换为np.array
以使用np.max
或转置它(将行设置为列,将列设置为行):
transposed = np.transpose(MotionsAndMoorings)
我希望这个答案不是非结构化的。有些部分是对你的功能的建议,有些是替代品。您应该选择所需的部件,如果您遇到任何问题,只需发表评论或提出其他问题。 : - )
答案 1 :(得分:1)
带有随机输入数组的示例,显示您可以使用一个命令轻松地在任一轴中使用max
。
import numpy as np
aa= np.random.random([4,3])
print aa
print
print np.max(aa,axis=0)
print
print np.max(aa,axis=1)
输出:
[[ 0.51972266 0.35930957 0.60381998]
[ 0.34577217 0.27908173 0.52146593]
[ 0.12101346 0.52268843 0.41704152]
[ 0.24181773 0.40747905 0.14980534]]
[ 0.51972266 0.52268843 0.60381998]
[ 0.60381998 0.52146593 0.52268843 0.40747905]