本文将分享一起洗牌NumpyArray和pandas数据框的详细内容,此外,我们还将为大家带来关于"ValueError:FailedtoconvertaNumPyarraytoanTensor(Un
本文将分享一起洗牌 Numpy Array 和 pandas 数据框的详细内容,此外,我们还将为大家带来关于"ValueError: Failed to convert a NumPy array to an Tensor (Unsupported object type numpy.ndarray). 在 TensorFlow CNN 中进行图像分类、array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?、Golang 中 `array` 和 `slice{array,array,...}` 有什么区别?、Numpy 1-dim array vs 2-dim array,其中一个维度的长度为 1的相关知识,希望对你有所帮助。
本文目录一览:- 一起洗牌 Numpy Array 和 pandas 数据框
- "ValueError: Failed to convert a NumPy array to an Tensor (Unsupported object type numpy.ndarray). 在 TensorFlow CNN 中进行图像分类
- array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?
- Golang 中 `array` 和 `slice{array,array,...}` 有什么区别?
- Numpy 1-dim array vs 2-dim array,其中一个维度的长度为 1
一起洗牌 Numpy Array 和 pandas 数据框
如何解决一起洗牌 Numpy Array 和 pandas 数据框
我有一个形状为 (18837349,2000) 的熊猫数据框和一个形状为 (18837349,6,601) 的 3D Numpy 数组。我想将我的数据帧的行和我的 Numpy 数组的第一个维度一起打乱。我知道如何打乱数据帧:
df_shuffle = df.sample(frac=1).reset_index(drop=True)
但我不知道如何与 3D Numpy Array 一起使用。将不胜感激。
解决方法
您可以混洗一个索引并将它们用于两个对象
ix = np.arange(len(18837349))
np.random.shuffle(ix)
df_shuffle,array_shuffle = your_df.iloc[ix].reset_index(drop=True),your_array[ix]
"ValueError: Failed to convert a NumPy array to an Tensor (Unsupported object type numpy.ndarray). 在 TensorFlow CNN 中进行图像分类
如何解决"ValueError: Failed to convert a NumPy array to an Tensor (Unsupported object type numpy.ndarray). 在 TensorFlow CNN 中进行图像分类
我一直在研究用于图像分类的 CNN,但我一直遇到同样的错误,我的数据正在加载到数据帧中,但我无法将其转换为张量以将其输入 CNN。如您所见,我使用此代码将图片加载到数据框中:
for i in range(len(merged)):
full_path = merged.iloc[i][''Image Path Rel'']
filename = full_path[-22:-1] + ''G''
try:
img = img_to_array(load_img(''D:/Serengeti_Data/Compressed/Compressed/'' + filename,target_size=(32,32,3)))
except:
img = np.zeros((32,3),dtype=np.float32)
images = images.append({''Capture Id'' : merged.iloc[i][''Capture Id''],''Image'' : img},ignore_index = True)
else:
images = images.append({''Capture Id'' : merged.iloc[i][''Capture Id''],ignore_index = True)
然后,一旦我使用 load_img()
和 img_to_array()
加载了图像,我进行了重塑以获得所需的 (32,3) 形状。还通过将 Image 列除以 255 来标准化这些值。
然后我这样做是为了尝试将其转换为张量:
train_tf = tf.data.Dataset.from_tensor_slices(images[''Image''])
# Also tried this,but didn''t got the same results:
# train_tf = tf.convert_to_tensor(train_df[''Image''])
但不断收到错误:
ValueError: 无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)
我也尝试跳过它并立即尝试适应我们的模型,但得到了完全相同的错误:
trying_df = pd.DataFrame(images[''Image''])
target_df = pd.DataFrame(targets)
animal_model = models.Sequential()
animal_model.add(layers.Conv2D(30,kernel_size = (3,padding = ''valid'',activation = ''relu'',input_shape =(32,3)))
animal_model.add(layers.MaxPooling2D(pool_size=(1,1)))
animal_model.add(layers.Conv2D(60,kernel_size=(1,1),activation = ''relu''))
animal_model.add(layers.Flatten())
animal_model.add(layers.Dense(100,activation = ''relu''))
animal_model.add(layers.Dense(10,activation = ''softmax''))
## compiler to model
animal_model.compile(loss = ''categorical_crossentropy'',metrics = [''accuracy''],optimizer =''adam'')
## training the model
animal_model.fit(trying_df,target_df,batch_size = 128,epochs = 15)
animal_model.summary()
TensorFlow 版本:2.4.1
Numpy 版本:1.19.5
熊猫版本:1.0.1
解决方法
为了加载图像,您可以使用以下代码:
image = cv2.imread(filename)
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
为了调整图像的大小和缩放比例,最好让模型“嵌入”预处理功能。
IMG_SIZE = 180
resize_and_rescale = tf.keras.Sequential([
layers.experimental.preprocessing.Resizing(IMG_SIZE,IMG_SIZE),layers.experimental.preprocessing.Rescaling(1./255)
])
model = tf.keras.Sequential(
[
resize_and_rescale,layers.Conv2D(32,3,activation="relu"),layers.MaxPooling2D(),layers.Conv2D(64,layers.Conv2D(128,layers.Flatten(),layers.Dense(128,layers.Dense(len(class_names),activation="softmax"),]
)
model.compile(
optimizer="adam",loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=["accuracy"],)
注意:
处理图像时使用 tf.Data
而不是 numpy 数组。您可以使用以下代码作为示例:
https://github.com/alessiosavi/tensorflow-face-recognition/blob/90d4acbea8f79539826b50c82a63a7c151441a1a/dense_embedding.py#L155
array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?
我期望Array(0,1,2)== Array(0,2)比较自然等式。例如,检查与其他数组的相应元素相比,数组的所有元素是否都返回true。
人们告诉我,Scala的数组只是一个Java [],只比较身份。是不是更有意义的重写Array’sequals方法比较自然平等?
解决方法
尝试下面2.8(编辑/注:从RC3,GenericArray是ArraySeq – 感谢retronym指出这一点):
import scala.collection.mutable.{GenericArray=>GArray,WrappedArray=>WArray} scala> GArray(0,2) == GArray(0,2) res0: Boolean = true scala> (Array(0,2):WArray[Int]) == (Array(0,2):WArray[Int]) res1: Boolean = true
GenericArray的行为就像Array,除了所有的Scala集合好处添加进来。WrappedArray wraps Java [] array;上面,我把一个简单的数组给它(比调用隐式转换函数容易),然后比较包装的数组。这些包装,尽管支持一个[]数组,也给你所有的收集好东西。
Golang 中 `array` 和 `slice{array,array,...}` 有什么区别?
Golang 中 `array` 和 `slice{array,array,...}` 有什么区别?这是很多初学者常问的问题。php小编子墨为您解答:在Golang中,`array` 是一个固定长度的序列,一旦定义后,长度就无法改变。而 `slice` 则是一个动态长度的序列,可以根据需要进行扩容或缩小。此外,`array` 的长度是在定义时确定的,而 `slice` 的长度可以在运行时动态改变。因此,在使用时,需要根据实际需求选择合适的数据结构。
问题内容
我很想知道为什么,请给我一点提示。
我想将一个数组附加到res中,res是一个二维切片。所以我需要先转换。 当我将数组转换为切片时,出现错误。
// i need a map to remove duplicates mm := map[[3]int]bool{} mm[[3]int{-1, -1, 2}] = true mm[[3]int{-1, -1, 2}] = true mm[[3]int{-1, 0, 1}] = true var res [][]int for k, _ := range mm { res = append(res, k[:]) } fmt.printf("the res is %v\n", res)
the res is [[-1 0 1] [-1 0 1]]
但是结果不是我想要的。
然后我试探性地修改了一下for循环
立即学习“go语言免费学习笔记(深入)”;
for k, _ := range mm { //res = append(res, k[:]) res = append(res, []int{k[0], k[1], k[2]}) }
the res is [[-1 0 1] [-1 -1 2]]
现在结果是对的,但是为什么呢? k[:] 和 []int{k[0],k[1],k[2]} 有什么区别?
解决方法
将循环更改为
for k, _ := range mm { j := k res = append(res, j[:]) }
您的原始循环声明了一个类型为 [3]int 的变量 k,该变量在内存中具有特定位置。循环的每次迭代,都会将映射 mm 中的不同键复制到该变量。到目前为止,一切顺利。
当您使用 k[:] 将其转换为切片时,它会创建一个切片标头,指向数组 k。这里出错了 - 循环的下一次迭代,k 的值被覆盖。循环中创建的所有切片都指向内存中同一位置的同一支持数组 k。
通过首先将 k 的值复制到在循环内声明的变量,您可以为每个切片提供自己的支持数组,从而避免了该问题。
以上就是Golang 中 `array` 和 `slice{array,array,...}` 有什么区别?的详细内容,更多请关注php中文网其它相关文章!
Numpy 1-dim array vs 2-dim array,其中一个维度的长度为 1
如何解决Numpy 1-dim array vs 2-dim array,其中一个维度的长度为 1
在 Matlab 中没有一维数组的概念。所有数组都至少有两个维度。所有“向量”都是“行向量”(1xn 数组)或“列向量”(nx1 数组)。
另一方面,在 NumPy 中,数组也可以是一维的。于是就有了“纯向量”(维度n)、“行向量”(维度1xn)和“列向量”(维度nx1)的概念。
现在我从 Matlab 转向 Python,这让我很头疼。
举个例子,考虑这样一种情况,我必须移动一个 nxk(n 通常很大,但 k 可以是 1)矩阵的行,称之为 A,向下一行,然后添加一行零第一行。
在 Matlab 中我会做
[n,k] = size(A);
B = [zeros(1,k); A(1:end-1,:)];
在 Numpy 中,我希望这不仅适用于二维输入,而且适用于一维输入。 所以一个有效的解决方案是
import numpy as np
if A.ndim == 1:
B = np.concatenate((np.zeros(1),A[:-1]),axis=0)
if A.ndim == 2:
(n,k) = A.shape
B = np.concatenate((np.zeros((1,k)),A[:-1,:]),axis=0)
但这太沉重了。有没有更好(更巧合)的方法?
更一般地说,我总是有这个问题:如果我写了一个接受二维数组 (nxk) 的函数,称它为 arr
,其中 k 很可能是 1 ,该函数可能在一维数组上失败(例如,如果我执行 arr[0,:]
)。 但我希望它也适用于一维数组,因为它们在道德上与其中一个维度为 1 的二维数组相同。
当然一种方法是放一些类似的东西
if arr.ndim == 1
arr = arr.reshape((arr.shape[0],1))
在函数的最开始,这样就保证函数有一个二维数组可以使用。
但这并不完全令人满意。例如,我的函数可能会返回一个与输入 (nxk) 形状相同的数组。但是如果输入是一维的,我希望它也返回一维的东西,而不是 (nx1)。所以为了处理这种情况,我需要添加其他冗长的 if 语句和重塑,这会使我的代码看起来更重和更丑。
最好的出路是什么?
解决方法
当涉及到数组大小时,我认为 numpy 的“严格性”(与 MATLAB 相比)是一种优势,我觉得它使许多事情变得更加可预测。
我针对您的第一个问题提出以下解决方案,其中可能包含一些用于解决未来问题的有用工具。第一个工具是 "ellipsis" (...
) 对象,可用于索引。当您在索引中看到这三个点时,您可以将其视为根据需要替换尽可能多的 :
。例如,如果 A.shape = (42,2021,69,7)
则 A[...,1,:]
与 A[:,:,:]
相同。在这里我应该补充一点,很明显,每个索引表达式只能使用其中之一。为了编写处理任意维数数组的函数,这是一件非常有用的事情。
第二个(这个答案不是必需的)是你可以将它用于 np.ones
或 np.zeros
等,你总是有相应的函数 np.ones_like
或 {{1 }},让您避免许多繁琐的计算。
所以在下面我们使用这些首先创建一个具有正确形状的新数组,而无需进行任何算术运算。我们只是在我们想要替换的东西上调用 np.zeros_like
(在本例中是 np.zeros_like
的最后一个“超行”,但它可以是其中的任何一个)。同时,省略号运算符可以方便地处理我们可能存在的任意数量的维度:
A
Try it online!
关于一起洗牌 Numpy Array 和 pandas 数据框的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于"ValueError: Failed to convert a NumPy array to an Tensor (Unsupported object type numpy.ndarray). 在 TensorFlow CNN 中进行图像分类、array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?、Golang 中 `array` 和 `slice{array,array,...}` 有什么区别?、Numpy 1-dim array vs 2-dim array,其中一个维度的长度为 1等相关知识的信息别忘了在本站进行查找喔。
本文标签: