Skip to content
Trang chủ » Understanding The Numpy.Ndarray Object Is Not Callable

Understanding The Numpy.Ndarray Object Is Not Callable

AttributeError: 'numpy.ndarray' object has no attribute 'append'

‘Numpy.Ndarray’ Object Is Not Callable

The ‘numpy.ndarray’ Object is Not Callable: Understanding and Troubleshooting

Overview of the numpy.ndarray Object:
The `numpy.ndarray` object, often referred to as an array, is the fundamental data structure in the NumPy library. It is a multidimensional container of data, allowing efficient storage and manipulation of large arrays. The `ndarray` objects support various operations such as mathematical, logical, shape manipulation, sorting, extracting statistics, and more.

Understanding the Issue of ‘numpy.ndarray’ Object is Not Callable:
Occasionally, when working with the `numpy.ndarray` object, you might encounter an error message stating “‘numpy.ndarray’ object is not callable.” This error occurs when you try to use parentheses () to call the array object as if it were a function.

Causes of the ‘numpy.ndarray’ Object is Not Callable Error:
The ‘not callable’ error message typically arises due to a certain misconception or mistake in your code. There are several common reasons that may lead to this error:

1. Missing function name: It is possible that you may have forgotten to specify the function or operation you want to perform on the `ndarray`. Instead of calling a specific function, you accidentally attempted to call the entire array object, resulting in the error.

2. Confusion with parentheses: A common mistake is to mistakenly use parentheses () after the array name, assuming it will execute a particular operation. However, an `ndarray` object is not callable – it does not have any callable attributes.

3. Wrong syntax: Incorrectly using parentheses in a way that is not syntactically correct can also trigger this error. Make sure to review the syntax of NumPy functions or operations you are trying to implement.

How to Identify and Troubleshoot the Error:
When encountering the “‘numpy.ndarray’ object is not callable” error, follow these steps to identify and troubleshoot the issue effectively:

1. Review the error message: Examine the full error message to understand where the error occurred and which line of code triggered it. This can provide clues about the specific function or operation causing the error.

2. Check the line of code: Look at the specific line of code where the error is occurring. Ensure that you are using appropriate syntax and function calls.

3. Verify the context: Understand the context in which you are using the `ndarray` object. Confirm that you are performing the intended operation correctly.

4. Review the documentation: Consult the official NumPy documentation to understand the correct syntax and usage of the function or operation you are attempting to perform. The documentation provides comprehensive information and examples for each NumPy function.

Common Mistakes that Lead to the Error:
In addition to the causes mentioned earlier, there are a few common mistakes that can result in the “‘numpy.ndarray’ object is not callable” error:

1. Missing function invocation: Forgetting to invoke a specific function on the `ndarray` object can lead to this error. Always ensure that you provide the required function call after the array name.

2. Improper indexing: If you are trying to access specific elements or subsets of the array using incorrect indices, it can cause the error. Double-check your indexing syntax to ensure it aligns with the array dimensions.

3. Incorrect operation sequence: NumPy provides a wide range of functions and operators to manipulate arrays. Ensuring you use the correct sequence of operations is crucial to avoid errors. Make sure to perform operations in the correct order and follow the correct syntax.

Best Practices to Avoid the ‘numpy.ndarray’ Object is Not Callable Error:
To minimize the occurrence of this error and improve your NumPy coding experience, consider the following best practices:

1. Review documentation and guides: Familiarize yourself with the NumPy documentation, tutorials, and guides. This will help you understand the correct usage of functions, operations, and syntax.

2. Use meaningful function names: When calling NumPy functions, use descriptive names to differentiate them from the `ndarray` object. This will reduce the chances of accidentally trying to call the array object itself.

3. Regularly test your code: Debugging and testing your code regularly can help identify errors and prevent the ‘not callable’ issue from occurring. Validate your code against sample inputs or test cases to catch any potential problems.

FAQs:
1. Q: How can I convert a NumPy array to a list?
A: You can convert a NumPy array to a list using the `tolist()` function. For example, `mylist = myarray.tolist()` will convert `myarray` to a list stored in `mylist`.

2. Q: Why do I get an “Unhashable type: ‘numpy.ndarray'” error?
A: This error occurs when you try to use a NumPy array as a key in a dictionary or as an element in a set. NumPy arrays are mutable, so they cannot be directly hashed. To resolve the error, convert the array to an immutable type like a tuple before using it as a key or element.

3. Q: How can I convert a NumPy array to an integer?
A: To convert a NumPy array to an integer, you can use the `astype()` function. For example, `myintegerarray = myfloatarray.astype(int)` will convert `myfloatarray` to an integer array stored in `myintegerarray`.

4. Q: How can I convert a DataFrame to a NumPy array?
A: You can use the `.values` attribute of a DataFrame to convert it to a NumPy array. For example, `myarray = mydataframe.values` will assign the DataFrame `mydataframe` to the NumPy array `myarray`.

5. Q: What is a NumPy iterator?
A: A NumPy iterator is an object that allows you to iterate over elements in a NumPy array or arrays. It provides a way to access each element without the overhead of creating a separate array.

6. Q: How can I convert an array to an object in Python?
A: To convert a NumPy array to an object array, you can use the `astype()` function with the `object` data type. For instance, `myobjectarray = myarray.astype(object)` will convert `myarray` to an object array.

7. Q: What does the “Operands could not be broadcast together with shapes” error mean?
A: This error occurs when you try to perform an operation on arrays with incompatible shapes. Broadcasting is the mechanism by which numpy handles operations between arrays with different shapes. To avoid this error, ensure that the shapes of the arrays involved in the operation are compatible or consider reshaping the arrays accordingly.

These frequently asked questions address some common issues and operations related to NumPy arrays, including the ‘numpy.ndarray’ object is not callable error. By understanding and following best practices, you can avoid such errors and work more efficiently with NumPy.

Additional Resources:
1. NumPy official documentation: https://numpy.org/doc/
2. NumPy tutorial on TutorialsPoint: https://www.tutorialspoint.com/numpy/index.htm
3. NumPy error and exception handling: https://numpy.org/doc/stable/user/misc.html#numpy-error-handling

Attributeerror: ‘Numpy.Ndarray’ Object Has No Attribute ‘Append’

Keywords searched by users: ‘numpy.ndarray’ object is not callable Numpy float64 object is not callable, NumPy array to list, Unhashable type: ‘numpy ndarray, Convert numpy array to int, DataFrame to numpy, Numpy iterator, Convert array to object Python, Operands could not be broadcast together with shapes

Categories: Top 29 ‘Numpy.Ndarray’ Object Is Not Callable

See more here: nhanvietluanvan.com

Numpy Float64 Object Is Not Callable

Numpy is a powerful library in Python that is widely used for mathematical operations and data manipulation. One common issue that users may encounter when working with Numpy is the “float64 object is not callable” error message. This error message usually occurs when attempting to call a Numpy float64 object as if it were a function.

Understanding the Numpy float64 object

Before diving into the issue at hand, it is essential to have a basic understanding of the Numpy float64 object. In Numpy, the float64 object represents a 64-bit floating-point number. It is a specific data type offered by Numpy to handle decimal numbers with high precision. The float64 object is commonly used in scientific computations, data analysis, and various other applications.

The Issue: “float64 object is not callable”

When encountering the “float64 object is not callable” error message, it is usually because the user is mistakenly attempting to call a Numpy float64 object as if it were a function. This error occurs when parentheses are used after a variable that holds a float64 object, incorrectly assuming it to be callable. Here is an example that shows the error in action:

“`
import numpy as np

x = np.float64(5.5)
result = x() # Attempting to call float64 object

# Output:
# TypeError: ‘numpy.float64’ object is not callable
“`

In the example above, we create a Numpy float64 object, `x`, with a value of 5.5. Then, we mistakenly attempt to call `x` as if it were a function by adding parentheses after it. However, since the float64 object is not callable, Python raises a TypeError and indicates that the object is not callable.

Reasons for the Error

The error message provides a clear indication of the problem: the float64 object is not callable. This occurs because the float64 object in Numpy is not designed to be called as a function. Instead, it should be used as a data type to represent decimal numbers.

A common reason for the “float64 object is not callable” error is a misunderstanding of how to use the float64 object. Users may assume that because parentheses are typically used for function calls, they should be used when working with the float64 object as well. However, this assumption is incorrect, as the float64 object is not callable.

Resolving the Issue

To resolve the “float64 object is not callable” error, it is necessary to identify and correct any incorrect usage of parentheses associated with the float64 object. Instead of trying to call the float64 object, it should be used as a data type to store decimal numbers.

For example, instead of trying to call the float64 object `x` like a function:
“`
result = x() # Incorrect usage
“`

We should use it as a data type and perform operations on it directly:
“`
result = x + 2.0 # Correct usage
“`

By removing the parentheses after `x`, we can perform mathematical operations on the float64 object without encountering the error.

FAQs

Q: Can I call a Numpy float64 object as a function?
A: No, the Numpy float64 object is not callable. It should be used as a data type to store decimal numbers, not as a function to be called.

Q: Why is the float64 object not callable in Numpy?
A: The float64 object is not callable in Numpy because it is designed to be a data type to store decimal numbers, not a function to be called. Calling the float64 object leads to a TypeError.

Q: How can I perform mathematical operations on a Numpy float64 object?
A: To perform mathematical operations on a Numpy float64 object, simply use the object directly in the operation, like any other number. For example, `result = x + 2.0` will add 2.0 to the value stored in `x`.

Q: Are there alternative data types to the float64 object in Numpy?
A: Yes, Numpy provides several alternative data types for decimal numbers, such as float32, float16, and float128. The choice of data type depends on the required precision and memory usage.

Q: Can I convert a float64 object to a callable function?
A: No, a float64 object cannot be converted to a callable function. It is intended to be a data type and does not support conversion to a function.

Q: Are there any workarounds to call a float64 object as a function?
A: No, there are no workarounds to call a Numpy float64 object as a function. It is important to use the float64 object as intended, as a data type to store decimal values.

In conclusion, the “float64 object is not callable” error message is a common issue that occurs when attempting to call a Numpy float64 object as if it were a function. Understanding how to properly use the float64 object as a data type to store decimal numbers is essential to avoid encountering this error. By adhering to the correct usage, users can leverage the power of Numpy for mathematical computations and data manipulation.

Numpy Array To List

NumPy Array to List: Understanding the Basics and Conversion Methods

NumPy, short for Numerical Python, is a powerful library in Python used for scientific computing. It offers high-performance multidimensional array objects, known as NumPy arrays, along with a wide range of mathematical functions to manipulate these arrays efficiently. While NumPy arrays are highly efficient for numerical operations, there may be situations where you might need to convert them to a conventional Python list. In this article, we will delve into the topic of converting NumPy arrays to lists, exploring various methods and use cases.

Understanding NumPy Arrays:

Before delving into the conversion methods, let’s ensure we have a clear understanding of NumPy arrays. In NumPy, an array is a grid of values of the same type, indexed by non-negative integers. Unlike Python lists, NumPy arrays have a fixed size and each element is of the same data type, allowing for efficient memory management and faster calculations. You can create NumPy arrays using the `numpy.ndarray` class.

Conversion Methods:

1. Using the `tolist()` function:
NumPy arrays come with an in-built `tolist()` function, which returns the array as a list. This is the simplest and most straightforward way to convert a NumPy array to list. However, keep in mind that it creates a copy of the array and, hence, can be memory-intensive for larger arrays.

2. Using the `tolist()` method:
In addition to the `tolist()` function, NumPy arrays also have a `tolist()` method, which can be directly called on the array itself. This method provides the same functionality as the `tolist()` function.

3. Using the `tolist()` function along an axis:
When dealing with multi-dimensional arrays, you may need to convert specific rows or columns to lists. You can achieve this by applying the `tolist()` function along a specified axis. For example, if you have a 3×3 NumPy array and want to convert each row to a separate list, you can use `tolist(axis=1)`.

4. Using the `flatten()` function:
The `flatten()` function is another method of converting a NumPy array to a 1-D list. Unlike the previous methods, it creates a new iterator object, allowing you to iterate over the flattened array using a for loop, if needed.

5. Using the `ravel()` function:
Similar to the `flatten()` function, the `ravel()` function converts a NumPy array to a 1-D list. However, it returns a flattened view of the original array instead of creating a copy, making it more memory-efficient.

FAQs:

Q1: Why would I need to convert a NumPy array to a list?
There can be multiple reasons for converting a NumPy array to a list. Some libraries and APIs might require data in the form of a list, rather than a NumPy array. Additionally, lists provide more flexibility in terms of data manipulation and are easier to transform or pass to other Python libraries that may not support NumPy arrays.

Q2: Can I directly convert a NumPy array to a list using the `list()` function?
No, the `list()` function cannot directly convert a NumPy array to a list. It treats the array as an iterable, resulting in a list of individual elements instead. To convert a NumPy array to a list, you can use the `tolist()` function or its equivalent methods.

Q3: Are there performance implications of converting NumPy arrays to lists?
Converting NumPy arrays to lists can result in performance implications, especially for large arrays. The conversion creates a new object (copy), leading to increased memory usage. It is advisable to use NumPy arrays for numerical calculations and convert to lists only when required by specific use cases.

Q4: Can I convert multi-dimensional arrays to nested lists?
Yes, NumPy arrays can be converted to nested lists using the various methods mentioned earlier. By applying the `tolist()` function along the appropriate axis, you can obtain nested lists representing rows or columns of the original array.

Conclusion:

NumPy arrays are a fundamental part of scientific computing in Python, providing efficient data structures for numerical calculations. However, there are situations where converting these arrays to conventional Python lists becomes necessary. With the methods discussed in this article, you’ll now have a clear understanding of how to transform NumPy arrays to lists, making your data more accessible and adaptable across various Python libraries and APIs.

Unhashable Type: ‘Numpy Ndarray

Unhashable type: ‘numpy ndarray

When working with data in Python, the numpy library is a powerful tool that enables efficient manipulation and analysis of arrays and matrices. However, when dealing with numpy ndarrays, you might come across the infamous error message: “Unhashable type: ‘numpy ndarray'”. In this article, we will delve into the details of this error, what it means, why it occurs, and how to resolve it.

What does “Unhashable type: ‘numpy ndarray'” mean?
The error message “Unhashable type: ‘numpy ndarray'” is raised when you try to use a numpy ndarray as a key in a Python dictionary or as an element in a Python set. In Python, both dictionaries and sets require their keys and elements to be hashable, which enables efficient indexing and retrieval of values. However, numpy ndarrays are mutable objects, and by default, they are unhashable.

Why do numpy ndarrays cause this error?
To understand why numpy ndarrays are unhashable by default, we need to go back to the concept of hashable objects in Python. In Python, hashability is a key trait that enables objects to be used as keys or elements in hash-based data structures like dictionaries and sets. Hashability ensures that objects can be efficiently located and retrieved without iterating over all the elements.

Hashability is achieved by implementing two special methods in a class: __hash__() and __eq__(). The __hash__() method calculates a hash value for an object, while the __eq__() method defines the object’s equality. When a key is provided in a dictionary or during a set operation, Python calculates the hash value for that key and uses it to find the corresponding bucket or slot that contains the value.

Now, numpy ndarrays are mutable objects, meaning they can be modified even after creation. Because of this mutability, their hash values can change if their internal data is modified. If numpy arrays were hashable by default, this could lead to situations where an object could not be located in a dictionary or set after its data has been modified. Therefore, numpy ndarrays are unhashable to maintain consistency and avoid potential issues.

How to resolve the “Unhashable type: ‘numpy ndarray'” error?
When encountering the “Unhashable type: ‘numpy ndarray'” error, there are a few different approaches you can take to resolve it. Let’s discuss them below:

1. Convert the numpy ndarray to a hashable type:
One way to work around this error is to convert the numpy ndarray into a hashable type. For instance, you can convert the ndarrays to immutable tuples by using the tolist() method. This conversion allows you to use the converted tuple as a key or element in a dictionary or set.

2. Use alternative data structures:
Instead of dictionaries or sets, consider using other data structures like lists or numpy specific data structures provided by the library itself. These data structures are designed to handle numpy ndarrays efficiently without requiring hashability.

3. Create a wrapper class:
If you frequently need to use numpy ndarrays as keys or elements, you can create a custom wrapper class that encapsulates the ndarray and implements the necessary __hash__() and __eq__() methods. This wrapper class can then be used in dictionaries or sets without encountering the “Unhashable type” error.

FAQs:

Q: Can I modify a numpy ndarray after converting it into a hashable type?
A: Yes, you can modify the original numpy ndarray even after converting it into a hashable type like a tuple. The hash value is calculated based on the initial state of the object when it was converted.

Q: Are all numpy objects unhashable?
A: No, not all numpy objects are unhashable. For example, numpy scalars, like numpy.int32 or numpy.float64, are hashable because they are immutable.

Q: Why can’t numpy ndarrays implement __hash__() and __eq__() by default?
A: Implementing the necessary methods to make numpy ndarrays hashable and comparable by default would sacrifice the flexibility and performance benefits of the library. Additionally, it would introduce potential inconsistencies when dealing with modified arrays.

In conclusion, the “Unhashable type: ‘numpy ndarray'” error occurs when trying to use a numpy ndarray as a key in a dictionary or an element in a set. Numpy ndarrays are unhashable by default because they are mutable objects, and their hash values can change if their internal data is modified. To overcome this error, you can convert the ndarrays into hashable types, use alternative data structures, or create a custom wrapper class. By understanding the concept of hashability and exploring the solutions provided, you can efficiently work with numpy ndarrays while avoiding this error.

Images related to the topic ‘numpy.ndarray’ object is not callable

AttributeError: 'numpy.ndarray' object has no attribute 'append'
AttributeError: ‘numpy.ndarray’ object has no attribute ‘append’

Found 14 images related to ‘numpy.ndarray’ object is not callable theme

Python - Dsolve Error: 'Numpy.Ndarray' Object Is Not Callable - Stack  Overflow
Python – Dsolve Error: ‘Numpy.Ndarray’ Object Is Not Callable – Stack Overflow
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy.Ndarray' Object Is Not Callable: The Complete Guide
Numpy.Ndarray’ Object Is Not Callable: The Complete Guide
Python - Why 'Numpy.Int64' Object Is Not Callable Here - Stack Overflow
Python – Why ‘Numpy.Int64’ Object Is Not Callable Here – Stack Overflow
Typeerror : 'List' Object Is Not Callable Solved In Python - Youtube
Typeerror : ‘List’ Object Is Not Callable Solved In Python – Youtube
Typeerror: 'List' Object Is Not Callable In Python
Typeerror: ‘List’ Object Is Not Callable In Python
Numpy.Ndarray' Object Is Not Callable: The Complete Guide
Numpy.Ndarray’ Object Is Not Callable: The Complete Guide
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Typeerror 'Float' Object Is Not Callable
Typeerror ‘Float’ Object Is Not Callable
Python - Matplotlib -- Typeerror: 'Module' Object Is Not Callable - Data  Science Stack Exchange
Python – Matplotlib — Typeerror: ‘Module’ Object Is Not Callable – Data Science Stack Exchange
Solved] Typeerror: Numpy.Float64 Object Is Not Callable
Solved] Typeerror: Numpy.Float64 Object Is Not Callable
Machine Learning - 'Tuple' Object Is Not Callable While Reshaping Training  Data Using Python - Data Science Stack Exchange
Machine Learning – ‘Tuple’ Object Is Not Callable While Reshaping Training Data Using Python – Data Science Stack Exchange
Array : Sklearn.Metrics.Confusion_Matrix - Typeerror: 'Numpy.Ndarray' Object  Is Not Callable - Youtube
Array : Sklearn.Metrics.Confusion_Matrix – Typeerror: ‘Numpy.Ndarray’ Object Is Not Callable – Youtube
Numpy.Ndarray' Object Is Not Callable: The Complete Guide
Numpy.Ndarray’ Object Is Not Callable: The Complete Guide
Python 'Numpy.Ndarray' Object Is Not Callable Solution
Python ‘Numpy.Ndarray’ Object Is Not Callable Solution
How To Fix: Typeerror: 'Numpy.Float' Object Is Not Callable? - Geeksforgeeks
How To Fix: Typeerror: ‘Numpy.Float’ Object Is Not Callable? – Geeksforgeeks
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
Numpy Ndarray Object Is Not Callable Error: Fix It Easily
I Am Normalizing The Data Set Iris In Python And Get The Error ::Typeerror:  'Numpy.Float64' Object Is Not Callable - Intellipaat Community
I Am Normalizing The Data Set Iris In Python And Get The Error ::Typeerror: ‘Numpy.Float64’ Object Is Not Callable – Intellipaat Community
Typeerror: Int Object Is Not Callable – How To Fix In Python
Typeerror: Int Object Is Not Callable – How To Fix In Python
The Dataframe Object Is Not Callable: Dealing With The 'Dataframe' Typeerror
The Dataframe Object Is Not Callable: Dealing With The ‘Dataframe’ Typeerror
Fix Typeerror: Nonetype Object Is Not Callable In Python
Fix Typeerror: Nonetype Object Is Not Callable In Python
Solved I Am Having Trouble With This Python Code. Could You | Chegg.Com
Solved I Am Having Trouble With This Python Code. Could You | Chegg.Com
Numpy.Ndarray' Object Is Not Callable 报错_东都大白兔的博客-Csdn博客
Numpy.Ndarray’ Object Is Not Callable 报错_东都大白兔的博客-Csdn博客
Python - Matplotlib -- Typeerror: 'Module' Object Is Not Callable - Data  Science Stack Exchange
Python – Matplotlib — Typeerror: ‘Module’ Object Is Not Callable – Data Science Stack Exchange
Typeerror 'Module' Object Is Not Callable In Python
Typeerror ‘Module’ Object Is Not Callable In Python
How To Fix Type Error: Float Object Is Not Callable - Youtube
How To Fix Type Error: Float Object Is Not Callable – Youtube
Fix Float Object Is Not Callable In Python | Delft Stack
Fix Float Object Is Not Callable In Python | Delft Stack
Sage - To Plot Matlab Data In Sagemath? - Super User
Sage – To Plot Matlab Data In Sagemath? – Super User
Python 'Numpy.Ndarray' Object Is Not Callable Solution
Python ‘Numpy.Ndarray’ Object Is Not Callable Solution
Typeerror: Module Object Is Not Callable [Python Error Solved]
Typeerror: Module Object Is Not Callable [Python Error Solved]
Typeerror :List' Object Is Not Callable - Notebook - Jupyter Community Forum
Typeerror :List’ Object Is Not Callable – Notebook – Jupyter Community Forum
How To Fix: 'Numpy.Ndarray' Object Has No Attribute 'Append' - Geeksforgeeks
How To Fix: ‘Numpy.Ndarray’ Object Has No Attribute ‘Append’ – Geeksforgeeks
Numpy.Float64' Error Resolution - Coding Ninjas
Numpy.Float64′ Error Resolution – Coding Ninjas
When Do You Use An Ellipsis In Python? – Real Python
When Do You Use An Ellipsis In Python? – Real Python
Typeerror: 'List' Object Is Not Callableとは何ですか? - Python学習チャンネル By Pyq
Typeerror: ‘List’ Object Is Not Callableとは何ですか? – Python学習チャンネル By Pyq
Solved 1A) Simulating A Standard Normal Random | Chegg.Com
Solved 1A) Simulating A Standard Normal Random | Chegg.Com
Fix Object Has No Attribute Error In Python | Delft Stack
Fix Object Has No Attribute Error In Python | Delft Stack
Numpy User | Pdf | Array Data Structure | Matrix (Mathematics)
Numpy User | Pdf | Array Data Structure | Matrix (Mathematics)
Python Declare Numpy Array 'Tuple' Is Not Callable (In Jupyter Notebook?) -  Stack Overflow
Python Declare Numpy Array ‘Tuple’ Is Not Callable (In Jupyter Notebook?) – Stack Overflow
The Most Frequent Python Errors And How To Fix Them | By Senthil E | Level  Up Coding
The Most Frequent Python Errors And How To Fix Them | By Senthil E | Level Up Coding

Article link: ‘numpy.ndarray’ object is not callable.

Learn more about the topic ‘numpy.ndarray’ object is not callable.

See more: https://nhanvietluanvan.com/luat-hoc/

Leave a Reply

Your email address will not be published. Required fields are marked *