草庐IT

多维度

全部标签

将图像数据堆栈的维度保持在RGB2Gray转换中

我有4DRGBimage_data[图像,高度,宽度,通道],在我的情况下,尺寸为(x,32、32、3),我想将这些图像转换为灰度,以便我仍然有4D为(x,32,32,1)。我发现一个非常简单的RGB2Gray转换:defrgb2gray(rgb):returnnp.dot(rgb[...,:3],[0.299,0.587,0.114])这个问题是它返回了我(x,32,32),所以我失去了一个维度。现在,我能想到的循环中的解决方案正在遵循,并且有效:defrgb2gray(images):gray_images=[]forimageinimages:gray_image=[]forsizein

如何将新数组附加到多维数组的开始

我有一个名为Varr的2维数组。看起来像...vArr=[[1,1],[2,2],[3,3]];我要做的是,当需要将新数组附加到Varr的开头,然后删除Varr的最后一个元素以保留其大小时,将所有数组元素移动到沿线(在这种情况下为3)。因此,例如,如果我想附加一个新元素[4,4],那么新的varr应该看起来像这样。vArr=[[4,4],[1,1],[2,2]];[4,4]已将其附加到一开始,所有其他元素都已移动,并且删除了Varr大小的任何剩余元素(即[3,3])已被删除。这是我到目前为止的代码...varvArr=[[1,1],[2,3],[3,3]];varnewv=[4,4];//Ne

c++ - 我可以使用指针访问多维数组吗?

来自this引用,在C中似乎未定义以下行为。intmy_array[100][50];int*p=my_array[0];p[50];//UBC++03或C++11中是否有引用资料证实了这一点? 最佳答案 在+运算符的描述中是的。您不能在C中取消引用该指针,因为它是第一个子数组的结束指针。在C++中,这目前是合法的,因为指针指向一个有效的整数(指向关系的点在第3节的某处定义)。然而,在这两个标准中,添加超过50个会产生未定义的行为。最近向c++委员会发送了一份DR,内容涉及取消引用此类“凭空有效”指针可能会被取消引用的规则,因此我不

c++ - 将多维数组传递给函数(C++)?

我一直在尝试将未知大小的多维数组传递给函数,但到目前为止还没有成功,当数组被声明时,它的维度是变量:doublea[b][b];据我所知,我需要在声明函数时给出b的值,a可以是未知的。我尝试将b声明为全局变量,但它接着说它必须是常量。即:intb;doublemyfunction(array[][b]){}intmain(){inta;doublec;doublemyarray[a][b];c=myfunction(myarray);return0;}有什么办法让它起作用吗? 最佳答案 按值传递:doublemyfunction(d

c++ - vector < vector < int >> 在第一个维度上的点积

我有vector>data_mat(3,vector(4));vectordata_vec(3);哪里data_mat可以被认为是一个矩阵和data_vec作为列vector,我正在寻找一种方法来计算data_mat的每一列的内积与data_vec,并将其存储在另一个vectordata_out(4)中.例子http://liveworkspace.org/code/2bW3X5%241使用for_each和transform,可用于计算矩阵的列和:sum=vector(data_mat[0].size());for_each(data_mat.begin(),data_mat.end

c++ - 在 C++ 中,类是否有可能拥有一个多维数组成员,其维度和范围直到运行时才知道?

我最初问usingnestedstd::arraytocreateanmultidimensionalarraywithoutknowingdimensionsorextentsuntilruntime但这有TheXYProblem尝试使用std::array来完成它。问题One-lineinitialiserforBoost.MultiArray和HowdoImakeamultidimensionalarrayofundeterminedsizeamemberofaclassinc++?他们的答案提供了一些有用的信息,如何使用Boost::MultiArray来避免在运行时需要知道维

c++ - 带维度的数组参数

为什么即使我给出完整维度,数组的大小也只是指针之一?这也要腐烂吗?#includeusingnamespacestd;voidfunction(char*arr[1][2]){cout 最佳答案 所有的函数声明voidfunction(char*arr[1][2]);voidfunction(char*arr[][2]);voidfunction(char*(*arr)[2]);是一样的。在多维数组的情况下,可以省略第一维。所以,无论你写voidfunction(char*arr[1][2]);或voidfunction(char*

c++ - 在 C++11 中使用 std::sort 和 lambda 函数对动态分配的多维 C 数组进行排序

我正在尝试使用std::sort和使用lambda的自定义排序函数对2D、动态分配的数组进行排序。numFaces是一个在程序开始时确定的整数值,在程序的生命周期内不会改变。这是我目前的方法。float(*data)[24]=newfloat[numFaces][24];std::sort(data,data+numFaces,[](float(&A)[24],float(&B)[24])->bool{returncomparison(A,B);//Pseudo});程序编译失败,出现以下错误:arraytype'float[24]'isnotassignable由于我在lambda声

c++ - CUDA: block 的更多维度还是只有一个?

我需要使用CUDA对矩阵(基本上是内存中一次浮点值的vector)的每个元素求平方根。矩阵维度不是已知的“先验”,可能会有所不同[2-20.000]。我在想:我可能会像这样使用(正如乔纳森在这里建议的那样)一个block维度:intthread_id=blockDim.x*block_id+threadIdx.x;并检查thread_id是否低于rows*columns...这非常简单直接。但是有什么特殊的性能原因为什么我应该使用两个(甚至三个)block网格维度来执行这样的计算(记住我毕竟有一个矩阵)而不是一个?我在考虑合并问题,比如让所有线程按顺序读取值

c++ - 使用类定义中的推断维度初始化静态常量多维数组

从C++11开始,可以在类定义中初始化staticconst内置类型,如下所示:classA{public:staticconstunsignedintval=0;//allowed};但是,在VisualC++2013中使用数组执行此操作会给我一个错误,告诉我这是不允许的:classB{public:staticconstunsignedintval[][2]={{0,1}};//notallowed};错误消息只是“constunsignedint[][2]类型的成员不能有类内初始化程序。”相反,我被迫执行以下操作:classC{public:staticconstunsigned