我对这件事还不熟悉,很困惑。
import numpy as np
randomnums = np.random.randint(1,100, size=(100,100))
print("Unsorted 100x100 Array:")
print(randomnums)
def bubbleSort(randomnums):
indexLength = len(randomnums)
for i in range(indexLength-1): #for all the values in the array
for x in range(1,indexLength,2): #for all the odd indexs
if randomnums[x] > randomnums[x+1]: #if number on left is larger
randomnums[x],randomnums[x+1] = randomnums[x+1], randomnums[x] #swap the values to sort in ascending order
else:
for x in range(0,indexLength,2): #for all the even indexs
if randomnums[x] < randomnums[x+1]:
randomnums[x], randomnums[x+1] = randomnums[x+1], randomnums[x] #swap the values to sort in descending order
可以使用np根据单个列的值对numpy数组进行排序。恩达雷。argsort()
然后切片。在python中,如何根据第二列对2D数组(numpy.ndarray)进行排序?
既然您想分别对偶数行和奇数行进行排序,那么让我们先将它们分开:
even_rows = randomnums[::2, :]
odd_rows = randomnums[1::2, :]
然后,使用上面链接中的逻辑:
asc_order = even_rows[:, 0].argsort()
desc_order = odd_rows[:, 0].argsort()[::-1]
even_ordered_rows = even_rows[asc_order, :]
odd_ordered_rows = odd_rows[desc_order, :]
然后,设置原始数组中的值:
randomnums[::2, :] = even_ordered_rows
randomnums[1::2, :] = odd_ordered_rows
让我们把这些都放在一个函数中:
def sort_interleaved_in_place(arr, col):
even_rows = arr[::2, :]
odd_rows = arr[1::2, :]
asc_order = even_rows[:, col].argsort()
desc_order = odd_rows[:, col].argsort()[::-1]
even_ordered_rows = even_rows[asc_order, :]
odd_ordered_rows = odd_rows[desc_order, :]
arr[::2, :] = even_ordered_rows
arr[1::2, :] = odd_ordered_rows
从一个更小(10x3)的阵列开始:
>>> randomnums = np.random.randint(1, 100, (10, 3))
array([[ 7, 48, 86],
[99, 76, 81],
[61, 71, 33],
[47, 41, 69],
[35, 81, 41],
[31, 7, 80],
[77, 91, 14],
[86, 38, 5],
[73, 11, 60],
[97, 59, 39]])
应用这个逻辑,我们得到这个结果:
>>> sort_interleaved_in_place(randomnums, 0)
>>> randomnums
array([[ 7, 48, 86],
[99, 76, 81],
[35, 81, 41],
[97, 59, 39],
[61, 71, 33],
[86, 38, 5],
[73, 11, 60],
[47, 41, 69],
[77, 91, 14],
[31, 7, 80]])
一开始,我认为行本身应该保持不变,并且只根据它们的索引重新排序(基本上只颠倒均匀索引的顺序),这没有太大的意义。
总之,这里有一个例子。请注意,每一个使用过的函数的文档都可以在[NumPy]:例程中找到。
代码00。py:
#!/usr/bin/env python
import sys
import numpy as np
def scramble(arr):
ret = np.empty_like(arr)
ret[1::2] = np.sort(arr[1::2]) # Odd
ret[::2] = np.flip(np.sort(arr[::2]), axis=-1) # Even
return ret
def main(*argv):
shp = (5, 5) # @TODO - cfati: Change this according to your requirements
arr0 = np.random.randint(0, np.prod(shp) - 1, size=shp)
print("Original:")
print(arr0)
print("\nScrambled:")
print(scramble(arr0))
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("\nDone.")
sys.exit(rc)
笔记:
>
NP排序基于(默认情况下)最内侧(最后,-1)轴对行中的元素进行排序(仅按升序)
对于降序,行中已排序(升序)的元素必须翻转(同样,基于最里面的轴-这一次必须显式指定,默认情况下,它发生在所有轴上)
输出:
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q071956865]> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe" code00.py
Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] 064bit on win32
Original:
[[23 14 14 5 10]
[11 11 16 1 4]
[10 22 17 2 14]
[ 0 5 20 1 21]
[16 13 5 21 5]]
Scrambled:
[[23 14 14 10 5]
[ 1 4 11 11 16]
[22 17 14 10 2]
[ 0 1 5 20 21]
[21 16 13 5 5]]
Done.
我有一个列表我想按升序排序这个列表,但首先是奇数,然后是偶数,就像这样: 无排序功能 我试过这个但我得到一个错误 谢谢你的回应
我想按第三个和第一个元素对元组数组进行排序,因此我使用了以下代码: 我的问题是,在前面的例子中,我可以按第三个元素和第一个元素的升序排序,也可以按它们的降序排序(使用反向)。但是如何按第三个元素的升序和第一个元素的降序排序。 请在你的回答中考虑以下情况: 在这种情况下,我不知道内部数组的确切大小(取决于我读入该数组的文件模式),我想按侧中的所有项进行排序(一些升序和一些降序)。 编辑:看起来,我明
我有数据。表中有大约300万行和40列。我希望在组内按降序对该表排序,如以下sql模拟代码: 数据中是否存在等效的方法。这张桌子可以吗?到目前为止,我必须将其分解为两个步骤: 这非常快,只需要几秒钟。 这一步需要更长的时间(5分钟)。 更新:有人评论要执行<code>X 我的方法是:setkey()然后是order(-Month) 我现在的问题是:如果我想按年、MemberId和一个又一个排序(年
我试图建立一个方法,将排序一个二维数组的双打按列。基于所提供的规范,此方法也不应该采用长度不等的行的粗糙数组。我正在使用双[][]mdarray={{3.0, 4.0, 1.0, 8.0},{13.0, 2.0, 12.0, 9.0}测试这个 使用打印方法时,应将其显示为 3.0, 2.0, 1.0, 8.0, 13.0, 4.0, 12.0, 9.0, 使用单独的打印方法输出结果时,数组似乎没有
我在学校的任务是创建一个程序,以升序排列数组的值。它几乎就在那里,但每当我输入“44 55 66 22 33 11 77 99 88 66”或它输出的任何数字 -858993460,11,22,33,44,55,66,66,77,88,或开头为负数 第一个数字到底怎么了?我是不是缺了什么? 我对C++很陌生,我不太明白这里的问题。如果有什么建议我可以用请告诉他们。 }
考虑下面的哈希图: 具有诸如 我需要按值对hashmap进行降序排序,但如果值相等,则按键进行升序排序: 到目前为止,我试着分别按键排序,然后按值排序,但我不相信这种方法。除了创建更多的hashmaps之外,还有什么好方法呢?