在本文中,我们将给您介绍关于numpy合并排序数组到一个新的数组?的详细内容,并且为您解答numpy合并数组的相关问题,此外,我们还将为您提供关于Java如何将两个排序数组合并为一个排序数组?、jav
在本文中,我们将给您介绍关于numpy合并排序数组到一个新的数组?的详细内容,并且为您解答numpy 合并数组的相关问题,此外,我们还将为您提供关于Java 如何将两个排序数组合并为一个排序数组?、java:合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。、numpy如何排序数组切片索引?、numpy:从2个真实的数组创建一个复杂的数组?的知识。
本文目录一览:- numpy合并排序数组到一个新的数组?(numpy 合并数组)
- Java 如何将两个排序数组合并为一个排序数组?
- java:合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。
- numpy如何排序数组切片索引?
- numpy:从2个真实的数组创建一个复杂的数组?
numpy合并排序数组到一个新的数组?(numpy 合并数组)
有什么方法可以使用numpy函数在mergesort中进行合并吗?
一些功能,如合并:
a = np.array([1,3,5])
b = np.array([2,4,6])
c = merge(a,b) # c == np.array([1,2,5,6])
我希望我可以借助numpy获得大数据的高性能
Java 如何将两个排序数组合并为一个排序数组?
如何解决Java 如何将两个排序数组合并为一个排序数组??
稍有改进,但是在主循环之后,System.arraycopy
当到达另一个输入数组的末尾时,可以用来复制其中一个输入数组的结尾。但是,那不会改变O(n)
你解决方案的性能特征。
public static int[] merge(int[] a, int[] b) {
int[] answer = new int[a.length + b.length];
int i = 0, j = 0, k = 0;
while (i < a.length && j < b.length)
answer[k++] = a[i] < b[j] ? a[i++] : b[j++];
while (i < a.length)
answer[k++] = a[i++];
while (j < b.length)
answer[k++] = b[j++];
return answer;
}
稍微紧凑但完全一样!
解决方法
这是在采访中问我的,这是我提供的解决方案:
public static int[] merge(int[] a,int[] b) {
int[] answer = new int[a.length + b.length];
int i = 0,j = 0,k = 0;
while (i < a.length && j < b.length)
{
if (a[i] < b[j])
{
answer[k] = a[i];
i++;
}
else
{
answer[k] = b[j];
j++;
}
k++;
}
while (i < a.length)
{
answer[k] = a[i];
i++;
k++;
}
while (j < b.length)
{
answer[k] = b[j];
j++;
k++;
}
return answer;
}
有没有更有效的方法可以做到这一点?
编辑:更正的长度方法。
java:合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。
合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。
样例 1:
输入: A=[1], B=[1]
输出:[1,1]
样例解释:
返回合并后的数组。
样例 2:
输入: A=[1,2,3,4], B=[2,4,5,6]
输出: [1,2,2,3,4,4,5,6]
样例解释:
返回合并后的数组。
思路:
先将两个数组拼接起来,然后排序。(还有简单的思路,这里暂时不实现)
实现代码:
import java.util.Arrays;
public class Solution {
public static void main(String args[]) {
int[] A = { 3, 2, 1, 4, 5 };
int[] B = { 5, 4 };
ArrayTwoInsert testArrayTwoInsert = new ArrayTwoInsert();
testArrayTwoInsert.mergeSortedArray(A, B);
}
}
class Sort {
/**
* 数组排序算法实现
*/
public void bubble(int[] array) {
/**
* 冒泡排序实现
*/
int length = array.length;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (array[j] > array[j + 1]) {
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
}
System.out.println(Arrays.toString(array));
}
public void select(int[] array) {
/**
* 选择排序实现
*/
int length = array.length;
for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) {
if (array[i] > array[j]) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
System.out.println(Arrays.toString(array));
}
}
class ArrayTwoInsert {
/**
* 合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。(输入的两个数组已排序)
*/
public int[] mergeSortedArray(int[] A, int[] B) {
int[] Twoarray = new int[A.length + B.length];
for (int i = 0; i < A.length; i++) {
Twoarray[i] = A[i];
}
for (int j = 0; j < B.length; j++) {
Twoarray[A.length + j] = B[j];
}
Sort testSort = new Sort();
testSort.select(Twoarray);
System.out.println(Arrays.toString(Twoarray));
return Twoarray;
}
}
numpy如何排序数组切片索引?
我有一个data
形状为(28,8,20)的np.array,我只需要其中的某些条目,所以我要切片:
In [41]: index = np.array([ 5, 6, 7, 8, 9, 10, 11, 17, 18, 19])In [42]: extract = data[:,:,index]In [43]: extract.shapeOut[43]: (28, 8, 10)
到目前为止一切都很好。但是,现在我想只看第一行最后一个索引的前两个条目:
In [45]: extract[0,:,np.array([0,1])].shapeOut[45]: (2, 8)
等待,应该是(8,2)。即使上次切片时它没有切换,它也改变了索引!根据我的理解,以下行为应以相同的方式进行:
In [46]: extract[0,:,:2].shapeOut[46]: (8, 2)
…但是它恰恰给了我我想要的!只要我拥有3D阵列,这两种方法似乎是等效的:
In [47]: extract[:,:,np.array([0,1])].shapeOut[47]: (28, 8, 2)In [48]: extract[:,:,:2].shapeOut[48]: (28, 8, 2)
那么,如果我不仅想要前两个条目,而且想要一个不规则列表,该怎么办?我当然可以在手术后转置矩阵,但这似乎非常违反直觉。解决我的问题的一种更好的方法是(尽管可能会有一个更优雅的方法):
In [64]: extract[0][:,[0,1]].shapeOut[64]: (8, 2)
这使我们进入了实际
题:
我想知道这种行为的原因是什么?谁决定这是应该如何工作的,可能比我更了解编程,并认为这在某种程度上是一致的,我完全不了解。除非有办法让我理解,否则我可能会继续打我的头。
答案1
小编典典这是(高级)部分索引的情况。有2个索引数组和1个切片
如果索引子空间(由切片对象)分开,则首先广播的索引空间,然后是x的切片子空间。
http://docs.scipy.org/doc/numpy-1.8.1/reference/arrays.indexing.html#advanced-
indexing
先进的索引例如笔记,当ind_1
,ind_2
broadcastable子空间shape (2,3,4)
是:
但是,x
[:,ind_1,:,ind_2]的形状为(2,3,4,10,30,50),因为在索引子空间中没有明确的放置位置,因此将其固定在开始位置。始终可以使用.transpose()将子空间移动到所需的任何位置。
换句话说,此索引与并不相同x[:, ind_1][[:,ind_2]
。这两个数组共同操作以定义一个(2,3,4)
子空间。
在您的示例中,extract[0,:,np.array([0,1])]
意思是选择一个(2,)
子空间([0]和[0,1]共同起作用,而不是顺序作用),然后以某种方式将其与中间维度合并。
一个更详细的示例是extract[[1,0],:,[[0,1],[1,0]]]
,它产生一个(2,2,8)
数组。这是(2,2)
第一个维度和最后一个维度以及中间维度的子空间。另一方面,X[[1,0]][:,:,[[0,1],[1,0]]]
产生一个(2,8,2,2)
,分别从第一个维度和最后一个维度中进行选择。
关键区别在于索引选择是顺序操作还是联合操作。`[…] […]语法已经可以按顺序操作。高级索引为您提供了一种联合索引的方式。
numpy:从2个真实的数组创建一个复杂的数组?
我想将同一数组的2个部分组合成一个复杂的数组:
Data[:,:,:,0] , Data[:,:,:,1]
这些不起作用:
x = np.complex(Data[:,:,:,0], Data[:,:,:,1])x = complex(Data[:,:,:,0], Data[:,:,:,1])
我想念什么吗?numpy是否不喜欢对复数执行数组函数?这是错误:
TypeError: only length-1 arrays can be converted to Python scalars
答案1
小编典典这似乎可以满足您的要求:
numpy.apply_along_axis(lambda args: [complex(*args)], 3, Data)
这是另一种解决方案:
# The ellipsis is equivalent here to ":,:,:"...numpy.vectorize(complex)(Data[...,0], Data[...,1])
还有另一个更简单的解决方案:
Data[...,0] + 1j * Data[...,1]
PS :如果要保存内存(无中间阵列):
result = 1j*Data[...,1]; result += Data[...,0]
devS的以下解决方案也很快。
今天的关于numpy合并排序数组到一个新的数组?和numpy 合并数组的分享已经结束,谢谢您的关注,如果想了解更多关于Java 如何将两个排序数组合并为一个排序数组?、java:合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。、numpy如何排序数组切片索引?、numpy:从2个真实的数组创建一个复杂的数组?的相关知识,请在本站进行查询。
本文标签: