Java版的NumPy - NDArray 排序、条件刷选函数

NDArray 排序、条件刷选函数

1. 数组的排序 - numpy.sort()
  • Python
    NumPy 提供了多种排序的方法。 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。 下表显示了三种排序算法的比较。
import numpy as np  
 
a = np.array([[3,7],[9,1]])  
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 sort() 函数:')
print (np.sort(a))
print ('\n')
print ('按列排序:')
print (np.sort(a, axis =  0))
print ('\n')

# 输出结果如下:
我们的数组是:
[[3 7]
 [9 1]]

调用 sort() 函数:
[[3 7]
 [1 9]]

按列排序:
[[3 1]
 [9 7]]
  • Java
NDArray a = manager.create(new int[][]{{3, 7}, {9, 1}});
System.out.println("我们的数组是:");
System.out.println(a.toDebugString(100, 10, 100, 100));
System.out.println("调用 sort() 函数:");
NDArray b = a.sort();
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("按列排序:");
b = a.sort(0);
System.out.println(b.toDebugString(100, 10, 100, 100));

# 输出结果如下:
我们的数组是:
ND: (2, 2) cpu() int32
[[ 3,  7],
 [ 9,  1],
]

调用 sort() 函数:
ND: (2, 2) cpu() int32
[[ 3,  7],
 [ 1,  9],
]

按列排序:
ND: (2, 2) cpu() int32
[[ 3,  1],
 [ 9,  7],
]
2. 数组值从小到大的索引值 - numpy.argsort()
  • Python
    numpy.argsort() 函数返回的是数组值从小到大的索引值。
import numpy as np 
 
x = np.array([3,  1,  2])  
print ('我们的数组是:')
print (x)
print ('\n')
print ('对 x 调用 argsort() 函数:')
y = np.argsort(x)  
print (y)


# 输出结果如下:
我们的数组是:
[3 1 2]

对 x 调用 argsort() 函数:
[1 2 0]
  • Java
a = manager.create(new int[]{3, 1, 2});
System.out.println("我们的数组是:");
System.out.println(a.toDebugString(100, 10, 100, 100));
System.out.println("调用 argsort() 函数:");
b = a.argSort();
System.out.println(b.toDebugString(100, 10, 100, 100));

# 输出结果如下:
我们的数组是:
ND: (3) cpu() int32
[ 3,  1,  2]

调用 argsort() 函数:
ND: (3) cpu() int64
[ 1,  2,  0]
3. 返回最大和最小元素的索引 - numpy.argmax() 和 numpy.argmin()
  • Python
    numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。
import numpy as np 
 
a = np.array([[30,40,70],[80,20,10],[50,90,60]])  
print  ('我们的数组是:') 
print (a) 
print ('\n') 
print ('调用 argmax() 函数:') 
print (np.argmax(a)) 
print ('\n') 
print ('展开数组:') 
print (a.flatten()) 
print ('\n') 
print ('沿轴 0 的最大值索引:') 
maxindex = np.argmax(a, axis =  0)  
print (maxindex) 
print ('\n') 
print ('沿轴 1 的最大值索引:') 
maxindex = np.argmax(a, axis =  1)  
print (maxindex) 
print ('\n') 
print ('调用 argmin() 函数:') 
minindex = np.argmin(a)  
print (minindex) 
print ('\n') 
print ('沿轴 0 的最小值索引:') 
minindex = np.argmin(a, axis =  0)  
print (minindex) 
print ('\n') 
print ('沿轴 1 的最小值索引:') 
minindex = np.argmin(a, axis =  1)  
print (minindex)

# 输出结果如下:
我们的数组是:
[[30 40 70]
 [80 20 10]
 [50 90 60]]

调用 argmax() 函数:
7

展开数组:
[30 40 70 80 20 10 50 90 60]

沿轴 0 的最大值索引:
[1 2 0]

沿轴 1 的最大值索引:
[2 0 1]

调用 argmin() 函数:
5

沿轴 0 的最小值索引:
[0 1 1]

沿轴 1 的最小值索引:
[0 2 0]
  • Java
a = manager.create(new int[][]{{30, 40, 70}, {80, 20, 10}, {50, 90, 60}});
System.out.println("我们的数组是:");
System.out.println(a.toDebugString(100, 10, 100, 100));
System.out.println("调用 argmax() 函数:");
b = a.argMax();
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("展开数组:");
b = a.flatten();
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("沿轴 0 的最大值索引:");
b = a.argMax(0);
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("沿轴 1 的最大值索引:");
b = a.argMax(1);
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("调用 argmin() 函数:");
b = a.argMin();
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("沿轴 0 的最大值索引:");
b = a.argMin(0);
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("沿轴 1 的最大值索引:");
b = a.argMin(1);
System.out.println(b.toDebugString(100, 10, 100, 100));          
        
# 输出结果如下:
我们的数组是:
ND: (3, 3) cpu() int32
[[30, 40, 70],
 [80, 20, 10],
 [50, 90, 60],
]

调用 argmax() 函数:
ND: () cpu() int64
7

展开数组:
ND: (9) cpu() int32
[30, 40, 70, 80, 20, 10, 50, 90, 60]

沿轴 0 的最大值索引:
ND: (3) cpu() int64
[ 1,  2,  0]

沿轴 1 的最大值索引:
ND: (3) cpu() int64
[ 2,  0,  1]

调用 argmin() 函数:
ND: () cpu() int64
5

沿轴 0 的最大值索引:
ND: (3) cpu() int64
[ 0,  1,  1]

沿轴 1 的最大值索引:
ND: (3) cpu() int64
[ 0,  2,  0]
4. 数组中非零元素的索引 - numpy.nonzero()
  • Python
    numpy.nonzero() 函数返回输入数组中非零元素的索引。
import numpy as np 
 
a = np.array([[30,40,0],[0,20,10],[50,0,60]])  
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 nonzero() 函数:')
print (np.nonzero (a))

# 输出结果如下:
我们的数组是:
[[30 40  0]
 [ 0 20 10]
 [50  0 60]]

调用 nonzero() 函数:
(array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))
  • Java
a = manager.create(new int[][]{{30, 40, 0}, {0, 20, 10}, {50, 0, 60}});
System.out.println("我们的数组是:");
System.out.println(a.toDebugString(100, 10, 100, 100));
System.out.println("调用 nonzero() 函数:");
b = a.nonzero();
System.out.println(b.toDebugString(100, 10, 100, 100));
       
# 输出结果如下:
调用 nonzero() 函数:
ND: (6, 2) cpu() int64
[[ 0,  0],
 [ 0,  1],
 [ 1,  1],
 [ 1,  2],
 [ 2,  0],
 [ 2,  2],
]
5. 数组中满足给定条件的元素的索引 - numpy.where()
  • Python
    numpy.where() 函数返回输入数组中满足给定条件的元素的索引。
import numpy as np 
 
x = np.arange(9.).reshape(3,  3)  
print ('我们的数组是:')
print (x)
print ( '大于 3 的元素的索引:')
y = np.where(x >  3)  
print (y)
print ('使用这些索引来获取满足条件的元素:')
print (x[y])

# 输出结果如下:
我们的数组是:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
大于 3 的元素的索引:
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))
使用这些索引来获取满足条件的元素:
[4. 5. 6. 7. 8.]
  • Java
a = manager.arange(9f).reshape(3, 3);
System.out.println("我们的数组是:");
System.out.println(a.toDebugString(100, 10, 100, 100));
System.out.println("大于 3 的元素的索引:");
b = a.gt(3);
System.out.println(b.toDebugString(100, 10, 100, 100));
System.out.println("使用这些索引来获取满足条件的元素:");
b = a.get(b);
System.out.println(b.toDebugString(100, 10, 100, 100));
     
# 输出结果如下:
我们的数组是:
ND: (3, 3) cpu() float32
[[0., 1., 2.],
 [3., 4., 5.],
 [6., 7., 8.],
]

大于 3 的元素的索引:
ND: (3, 3) cpu() boolean
[[false, false, false],
 [false,  true,  true],
 [ true,  true,  true],
]

使用这些索引来获取满足条件的元素:
ND: (5) cpu() float32
[4., 5., 6., 7., 8.]

代码下载地址:

Github链接

Gitee链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值