GVKun编程网logo

numpy合并排序数组到一个新的数组?(numpy 合并数组)

12

在本文中,我们将给您介绍关于numpy合并排序数组到一个新的数组?的详细内容,并且为您解答numpy合并数组的相关问题,此外,我们还将为您提供关于Java如何将两个排序数组合并为一个排序数组?、jav

在本文中,我们将给您介绍关于numpy合并排序数组到一个新的数组?的详细内容,并且为您解答numpy 合并数组的相关问题,此外,我们还将为您提供关于Java 如何将两个排序数组合并为一个排序数组?、java:合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。、numpy如何排序数组切片索引?、numpy:从2个真实的数组创建一个复杂的数组?的知识。

本文目录一览:

numpy合并排序数组到一个新的数组?(numpy 合并数组)

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 如何将两个排序数组合并为一个排序数组?

如何解决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变成一个新的数组。新数组也要有序。

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如何排序数组切片索引?

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_1ind_2broadcastable子空间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个真实的数组创建一个复杂的数组?

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个真实的数组创建一个复杂的数组?的相关知识,请在本站进行查询。

本文标签: